{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import mxnet as mx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from mxnet.gluon import nn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from mxnet import gluon, nd, autograd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "from PIL import Image"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "import logging"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import glob"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "ctx = mx.cpu()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# create logger with 'spam_application'\n",
    "logger = logging.getLogger('VGG_net')\n",
    "logger.setLevel(logging.DEBUG)\n",
    "# create file handler which logs even debug messages\n",
    "fh = logging.FileHandler('train.log')\n",
    "fh.setLevel(logging.DEBUG)\n",
    "fh.setFormatter(logging.Formatter('%(asctime)s - %(message)s'))\n",
    "ch = logging.StreamHandler()\n",
    "\n",
    "logger.addHandler(fh)\n",
    "logger.addHandler(ch)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "nihao\n"
     ]
    }
   ],
   "source": [
    "logger.info(\"nihao\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_classes = 3753"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "# dataset = mx.gluon.data.vision.ImageFolderDataset(\"./data/fontset/\", flag=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "invalid syntax (<ipython-input-13-25d324e0d4a5>, line 1)",
     "output_type": "error",
     "traceback": [
      "\u001b[0;36m  File \u001b[0;32m\"<ipython-input-13-25d324e0d4a5>\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m    def fast_load\u001b[0m\n\u001b[0m                 ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
     ]
    }
   ],
   "source": [
    "def fast_load"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "def load_dataset(path):\n",
    "    imgs, labels = [], []\n",
    "    label_set = os.listdir(path)\n",
    "    for i, label_str in enumerate(label_set):\n",
    "        print(\"%f%%\"% (100*i/len(label_set)))\n",
    "        for p in glob.glob(os.path.join(path, label_str, \"*.png\")):\n",
    "            im = mx.img.imread(p, flag=0)\n",
    "            a = nd.transpose(im, (2, 0, 1))\n",
    "            b = nd.reshape(a, (1, 1, 50, 50))\n",
    "            imgs.append(b.astype(np.float32))\n",
    "            labels.append(int(label_str))\n",
    "    return imgs, labels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.000000%\n",
      "0.026638%\n",
      "0.053277%\n",
      "0.079915%\n",
      "0.106553%\n",
      "0.133191%\n",
      "0.159830%\n",
      "0.186468%\n",
      "0.213106%\n",
      "0.239744%\n",
      "0.266383%\n",
      "0.293021%\n",
      "0.319659%\n",
      "0.346297%\n",
      "0.372936%\n",
      "0.399574%\n",
      "0.426212%\n",
      "0.452850%\n",
      "0.479489%\n",
      "0.506127%\n",
      "0.532765%\n",
      "0.559403%\n",
      "0.586042%\n",
      "0.612680%\n",
      "0.639318%\n",
      "0.665956%\n",
      "0.692595%\n",
      "0.719233%\n",
      "0.745871%\n",
      "0.772509%\n",
      "0.799148%\n",
      "0.825786%\n",
      "0.852424%\n",
      "0.879062%\n",
      "0.905701%\n",
      "0.932339%\n",
      "0.958977%\n",
      "0.985615%\n",
      "1.012254%\n",
      "1.038892%\n",
      "1.065530%\n",
      "1.092168%\n",
      "1.118807%\n",
      "1.145445%\n",
      "1.172083%\n",
      "1.198721%\n",
      "1.225360%\n",
      "1.251998%\n",
      "1.278636%\n",
      "1.305274%\n",
      "1.331913%\n",
      "1.358551%\n",
      "1.385189%\n",
      "1.411827%\n",
      "1.438466%\n",
      "1.465104%\n",
      "1.491742%\n",
      "1.518380%\n",
      "1.545019%\n",
      "1.571657%\n",
      "1.598295%\n",
      "1.624933%\n",
      "1.651572%\n",
      "1.678210%\n",
      "1.704848%\n",
      "1.731486%\n",
      "1.758125%\n",
      "1.784763%\n",
      "1.811401%\n",
      "1.838039%\n",
      "1.864678%\n",
      "1.891316%\n",
      "1.917954%\n",
      "1.944592%\n",
      "1.971231%\n",
      "1.997869%\n",
      "2.024507%\n",
      "2.051145%\n",
      "2.077784%\n",
      "2.104422%\n",
      "2.131060%\n",
      "2.157698%\n",
      "2.184337%\n",
      "2.210975%\n",
      "2.237613%\n",
      "2.264251%\n",
      "2.290890%\n",
      "2.317528%\n",
      "2.344166%\n",
      "2.370804%\n",
      "2.397443%\n",
      "2.424081%\n",
      "2.450719%\n",
      "2.477357%\n",
      "2.503996%\n",
      "2.530634%\n",
      "2.557272%\n",
      "2.583910%\n",
      "2.610549%\n",
      "2.637187%\n",
      "2.663825%\n",
      "2.690464%\n",
      "2.717102%\n",
      "2.743740%\n",
      "2.770378%\n",
      "2.797017%\n",
      "2.823655%\n",
      "2.850293%\n",
      "2.876931%\n",
      "2.903570%\n",
      "2.930208%\n",
      "2.956846%\n",
      "2.983484%\n",
      "3.010123%\n",
      "3.036761%\n",
      "3.063399%\n",
      "3.090037%\n",
      "3.116676%\n",
      "3.143314%\n",
      "3.169952%\n",
      "3.196590%\n",
      "3.223229%\n",
      "3.249867%\n",
      "3.276505%\n",
      "3.303143%\n",
      "3.329782%\n",
      "3.356420%\n",
      "3.383058%\n",
      "3.409696%\n",
      "3.436335%\n",
      "3.462973%\n",
      "3.489611%\n",
      "3.516249%\n",
      "3.542888%\n",
      "3.569526%\n",
      "3.596164%\n",
      "3.622802%\n",
      "3.649441%\n",
      "3.676079%\n",
      "3.702717%\n",
      "3.729355%\n",
      "3.755994%\n",
      "3.782632%\n",
      "3.809270%\n",
      "3.835908%\n",
      "3.862547%\n",
      "3.889185%\n",
      "3.915823%\n",
      "3.942461%\n",
      "3.969100%\n",
      "3.995738%\n",
      "4.022376%\n",
      "4.049014%\n",
      "4.075653%\n",
      "4.102291%\n",
      "4.128929%\n",
      "4.155567%\n",
      "4.182206%\n",
      "4.208844%\n",
      "4.235482%\n",
      "4.262120%\n",
      "4.288759%\n",
      "4.315397%\n",
      "4.342035%\n",
      "4.368673%\n",
      "4.395312%\n",
      "4.421950%\n",
      "4.448588%\n",
      "4.475226%\n",
      "4.501865%\n",
      "4.528503%\n",
      "4.555141%\n",
      "4.581779%\n",
      "4.608418%\n",
      "4.635056%\n",
      "4.661694%\n",
      "4.688332%\n",
      "4.714971%\n",
      "4.741609%\n",
      "4.768247%\n",
      "4.794885%\n",
      "4.821524%\n",
      "4.848162%\n",
      "4.874800%\n",
      "4.901438%\n",
      "4.928077%\n",
      "4.954715%\n",
      "4.981353%\n",
      "5.007991%\n",
      "5.034630%\n",
      "5.061268%\n",
      "5.087906%\n",
      "5.114544%\n",
      "5.141183%\n",
      "5.167821%\n",
      "5.194459%\n",
      "5.221097%\n",
      "5.247736%\n",
      "5.274374%\n",
      "5.301012%\n",
      "5.327651%\n",
      "5.354289%\n",
      "5.380927%\n",
      "5.407565%\n",
      "5.434204%\n",
      "5.460842%\n",
      "5.487480%\n",
      "5.514118%\n",
      "5.540757%\n",
      "5.567395%\n",
      "5.594033%\n",
      "5.620671%\n",
      "5.647310%\n",
      "5.673948%\n",
      "5.700586%\n",
      "5.727224%\n",
      "5.753863%\n",
      "5.780501%\n",
      "5.807139%\n",
      "5.833777%\n",
      "5.860416%\n",
      "5.887054%\n",
      "5.913692%\n",
      "5.940330%\n",
      "5.966969%\n",
      "5.993607%\n",
      "6.020245%\n",
      "6.046883%\n",
      "6.073522%\n",
      "6.100160%\n",
      "6.126798%\n",
      "6.153436%\n",
      "6.180075%\n",
      "6.206713%\n",
      "6.233351%\n",
      "6.259989%\n",
      "6.286628%\n",
      "6.313266%\n",
      "6.339904%\n",
      "6.366542%\n",
      "6.393181%\n",
      "6.419819%\n",
      "6.446457%\n",
      "6.473095%\n",
      "6.499734%\n",
      "6.526372%\n",
      "6.553010%\n",
      "6.579648%\n",
      "6.606287%\n",
      "6.632925%\n",
      "6.659563%\n",
      "6.686201%\n",
      "6.712840%\n",
      "6.739478%\n",
      "6.766116%\n",
      "6.792754%\n",
      "6.819393%\n",
      "6.846031%\n",
      "6.872669%\n",
      "6.899307%\n",
      "6.925946%\n",
      "6.952584%\n",
      "6.979222%\n",
      "7.005860%\n",
      "7.032499%\n",
      "7.059137%\n",
      "7.085775%\n",
      "7.112413%\n",
      "7.139052%\n",
      "7.165690%\n",
      "7.192328%\n",
      "7.218966%\n",
      "7.245605%\n",
      "7.272243%\n",
      "7.298881%\n",
      "7.325519%\n",
      "7.352158%\n",
      "7.378796%\n",
      "7.405434%\n",
      "7.432072%\n",
      "7.458711%\n",
      "7.485349%\n",
      "7.511987%\n",
      "7.538625%\n",
      "7.565264%\n",
      "7.591902%\n",
      "7.618540%\n",
      "7.645178%\n",
      "7.671817%\n",
      "7.698455%\n",
      "7.725093%\n",
      "7.751731%\n",
      "7.778370%\n",
      "7.805008%\n",
      "7.831646%\n",
      "7.858284%\n",
      "7.884923%\n",
      "7.911561%\n",
      "7.938199%\n",
      "7.964838%\n",
      "7.991476%\n",
      "8.018114%\n",
      "8.044752%\n",
      "8.071391%\n",
      "8.098029%\n",
      "8.124667%\n",
      "8.151305%\n",
      "8.177944%\n",
      "8.204582%\n",
      "8.231220%\n",
      "8.257858%\n",
      "8.284497%\n",
      "8.311135%\n",
      "8.337773%\n",
      "8.364411%\n",
      "8.391050%\n",
      "8.417688%\n",
      "8.444326%\n",
      "8.470964%\n",
      "8.497603%\n",
      "8.524241%\n",
      "8.550879%\n",
      "8.577517%\n",
      "8.604156%\n",
      "8.630794%\n",
      "8.657432%\n",
      "8.684070%\n",
      "8.710709%\n",
      "8.737347%\n",
      "8.763985%\n",
      "8.790623%\n",
      "8.817262%\n",
      "8.843900%\n",
      "8.870538%\n",
      "8.897176%\n",
      "8.923815%\n",
      "8.950453%\n",
      "8.977091%\n",
      "9.003729%\n",
      "9.030368%\n",
      "9.057006%\n",
      "9.083644%\n",
      "9.110282%\n",
      "9.136921%\n",
      "9.163559%\n",
      "9.190197%\n",
      "9.216835%\n",
      "9.243474%\n",
      "9.270112%\n",
      "9.296750%\n",
      "9.323388%\n",
      "9.350027%\n",
      "9.376665%\n",
      "9.403303%\n",
      "9.429941%\n",
      "9.456580%\n",
      "9.483218%\n",
      "9.509856%\n",
      "9.536494%\n",
      "9.563133%\n",
      "9.589771%\n",
      "9.616409%\n",
      "9.643047%\n",
      "9.669686%\n",
      "9.696324%\n",
      "9.722962%\n",
      "9.749600%\n",
      "9.776239%\n",
      "9.802877%\n",
      "9.829515%\n",
      "9.856153%\n",
      "9.882792%\n",
      "9.909430%\n",
      "9.936068%\n",
      "9.962706%\n",
      "9.989345%\n",
      "10.015983%\n",
      "10.042621%\n",
      "10.069259%\n",
      "10.095898%\n",
      "10.122536%\n",
      "10.149174%\n",
      "10.175812%\n",
      "10.202451%\n",
      "10.229089%\n",
      "10.255727%\n",
      "10.282365%\n",
      "10.309004%\n",
      "10.335642%\n",
      "10.362280%\n",
      "10.388918%\n",
      "10.415557%\n",
      "10.442195%\n",
      "10.468833%\n",
      "10.495471%\n",
      "10.522110%\n",
      "10.548748%\n",
      "10.575386%\n",
      "10.602025%\n",
      "10.628663%\n",
      "10.655301%\n",
      "10.681939%\n",
      "10.708578%\n",
      "10.735216%\n",
      "10.761854%\n",
      "10.788492%\n",
      "10.815131%\n",
      "10.841769%\n",
      "10.868407%\n",
      "10.895045%\n",
      "10.921684%\n",
      "10.948322%\n",
      "10.974960%\n",
      "11.001598%\n",
      "11.028237%\n",
      "11.054875%\n",
      "11.081513%\n",
      "11.108151%\n",
      "11.134790%\n",
      "11.161428%\n",
      "11.188066%\n",
      "11.214704%\n",
      "11.241343%\n",
      "11.267981%\n",
      "11.294619%\n",
      "11.321257%\n",
      "11.347896%\n",
      "11.374534%\n",
      "11.401172%\n",
      "11.427810%\n",
      "11.454449%\n",
      "11.481087%\n",
      "11.507725%\n",
      "11.534363%\n",
      "11.561002%\n",
      "11.587640%\n",
      "11.614278%\n",
      "11.640916%\n",
      "11.667555%\n",
      "11.694193%\n",
      "11.720831%\n",
      "11.747469%\n",
      "11.774108%\n",
      "11.800746%\n",
      "11.827384%\n",
      "11.854022%\n",
      "11.880661%\n",
      "11.907299%\n",
      "11.933937%\n",
      "11.960575%\n",
      "11.987214%\n",
      "12.013852%\n",
      "12.040490%\n",
      "12.067128%\n",
      "12.093767%\n",
      "12.120405%\n",
      "12.147043%\n",
      "12.173681%\n",
      "12.200320%\n",
      "12.226958%\n",
      "12.253596%\n",
      "12.280234%\n",
      "12.306873%\n",
      "12.333511%\n",
      "12.360149%\n",
      "12.386787%\n",
      "12.413426%\n",
      "12.440064%\n",
      "12.466702%\n",
      "12.493340%\n",
      "12.519979%\n",
      "12.546617%\n",
      "12.573255%\n",
      "12.599893%\n",
      "12.626532%\n",
      "12.653170%\n",
      "12.679808%\n",
      "12.706446%\n",
      "12.733085%\n",
      "12.759723%\n",
      "12.786361%\n",
      "12.812999%\n",
      "12.839638%\n",
      "12.866276%\n",
      "12.892914%\n",
      "12.919552%\n",
      "12.946191%\n",
      "12.972829%\n",
      "12.999467%\n",
      "13.026105%\n",
      "13.052744%\n",
      "13.079382%\n",
      "13.106020%\n",
      "13.132658%\n",
      "13.159297%\n",
      "13.185935%\n",
      "13.212573%\n",
      "13.239212%\n",
      "13.265850%\n",
      "13.292488%\n",
      "13.319126%\n",
      "13.345765%\n",
      "13.372403%\n",
      "13.399041%\n",
      "13.425679%\n",
      "13.452318%\n",
      "13.478956%\n",
      "13.505594%\n",
      "13.532232%\n",
      "13.558871%\n",
      "13.585509%\n",
      "13.612147%\n",
      "13.638785%\n",
      "13.665424%\n",
      "13.692062%\n",
      "13.718700%\n",
      "13.745338%\n",
      "13.771977%\n",
      "13.798615%\n",
      "13.825253%\n",
      "13.851891%\n",
      "13.878530%\n",
      "13.905168%\n",
      "13.931806%\n",
      "13.958444%\n",
      "13.985083%\n",
      "14.011721%\n",
      "14.038359%\n",
      "14.064997%\n",
      "14.091636%\n",
      "14.118274%\n",
      "14.144912%\n",
      "14.171550%\n",
      "14.198189%\n",
      "14.224827%\n",
      "14.251465%\n",
      "14.278103%\n",
      "14.304742%\n",
      "14.331380%\n",
      "14.358018%\n",
      "14.384656%\n",
      "14.411295%\n",
      "14.437933%\n",
      "14.464571%\n",
      "14.491209%\n",
      "14.517848%\n",
      "14.544486%\n",
      "14.571124%\n",
      "14.597762%\n",
      "14.624401%\n",
      "14.651039%\n",
      "14.677677%\n",
      "14.704315%\n",
      "14.730954%\n",
      "14.757592%\n",
      "14.784230%\n",
      "14.810868%\n",
      "14.837507%\n",
      "14.864145%\n",
      "14.890783%\n",
      "14.917421%\n",
      "14.944060%\n",
      "14.970698%\n",
      "14.997336%\n",
      "15.023974%\n",
      "15.050613%\n",
      "15.077251%\n",
      "15.103889%\n",
      "15.130527%\n",
      "15.157166%\n",
      "15.183804%\n",
      "15.210442%\n",
      "15.237080%\n",
      "15.263719%\n",
      "15.290357%\n",
      "15.316995%\n",
      "15.343633%\n",
      "15.370272%\n",
      "15.396910%\n",
      "15.423548%\n",
      "15.450186%\n",
      "15.476825%\n",
      "15.503463%\n",
      "15.530101%\n",
      "15.556739%\n",
      "15.583378%\n",
      "15.610016%\n",
      "15.636654%\n",
      "15.663292%\n",
      "15.689931%\n",
      "15.716569%\n",
      "15.743207%\n",
      "15.769845%\n",
      "15.796484%\n",
      "15.823122%\n",
      "15.849760%\n",
      "15.876399%\n",
      "15.903037%\n",
      "15.929675%\n",
      "15.956313%\n",
      "15.982952%\n",
      "16.009590%\n",
      "16.036228%\n",
      "16.062866%\n",
      "16.089505%\n",
      "16.116143%\n",
      "16.142781%\n",
      "16.169419%\n",
      "16.196058%\n",
      "16.222696%\n",
      "16.249334%\n",
      "16.275972%\n",
      "16.302611%\n",
      "16.329249%\n",
      "16.355887%\n",
      "16.382525%\n",
      "16.409164%\n",
      "16.435802%\n",
      "16.462440%\n",
      "16.489078%\n",
      "16.515717%\n",
      "16.542355%\n",
      "16.568993%\n",
      "16.595631%\n",
      "16.622270%\n",
      "16.648908%\n",
      "16.675546%\n",
      "16.702184%\n",
      "16.728823%\n",
      "16.755461%\n",
      "16.782099%\n",
      "16.808737%\n",
      "16.835376%\n",
      "16.862014%\n",
      "16.888652%\n",
      "16.915290%\n",
      "16.941929%\n",
      "16.968567%\n",
      "16.995205%\n",
      "17.021843%\n",
      "17.048482%\n",
      "17.075120%\n",
      "17.101758%\n",
      "17.128396%\n",
      "17.155035%\n",
      "17.181673%\n",
      "17.208311%\n",
      "17.234949%\n",
      "17.261588%\n",
      "17.288226%\n",
      "17.314864%\n",
      "17.341502%\n",
      "17.368141%\n",
      "17.394779%\n",
      "17.421417%\n",
      "17.448055%\n",
      "17.474694%\n",
      "17.501332%\n",
      "17.527970%\n",
      "17.554608%\n",
      "17.581247%\n",
      "17.607885%\n",
      "17.634523%\n",
      "17.661161%\n",
      "17.687800%\n",
      "17.714438%\n",
      "17.741076%\n",
      "17.767714%\n",
      "17.794353%\n",
      "17.820991%\n",
      "17.847629%\n",
      "17.874267%\n",
      "17.900906%\n",
      "17.927544%\n",
      "17.954182%\n",
      "17.980820%\n",
      "18.007459%\n",
      "18.034097%\n",
      "18.060735%\n",
      "18.087373%\n",
      "18.114012%\n",
      "18.140650%\n",
      "18.167288%\n",
      "18.193926%\n",
      "18.220565%\n",
      "18.247203%\n",
      "18.273841%\n",
      "18.300479%\n",
      "18.327118%\n",
      "18.353756%\n",
      "18.380394%\n",
      "18.407032%\n",
      "18.433671%\n",
      "18.460309%\n",
      "18.486947%\n",
      "18.513586%\n",
      "18.540224%\n",
      "18.566862%\n",
      "18.593500%\n",
      "18.620139%\n",
      "18.646777%\n",
      "18.673415%\n",
      "18.700053%\n",
      "18.726692%\n",
      "18.753330%\n",
      "18.779968%\n",
      "18.806606%\n",
      "18.833245%\n",
      "18.859883%\n",
      "18.886521%\n",
      "18.913159%\n",
      "18.939798%\n",
      "18.966436%\n",
      "18.993074%\n",
      "19.019712%\n",
      "19.046351%\n",
      "19.072989%\n",
      "19.099627%\n",
      "19.126265%\n",
      "19.152904%\n",
      "19.179542%\n",
      "19.206180%\n",
      "19.232818%\n",
      "19.259457%\n",
      "19.286095%\n",
      "19.312733%\n",
      "19.339371%\n",
      "19.366010%\n",
      "19.392648%\n",
      "19.419286%\n",
      "19.445924%\n",
      "19.472563%\n",
      "19.499201%\n",
      "19.525839%\n",
      "19.552477%\n",
      "19.579116%\n",
      "19.605754%\n",
      "19.632392%\n",
      "19.659030%\n",
      "19.685669%\n",
      "19.712307%\n",
      "19.738945%\n",
      "19.765583%\n",
      "19.792222%\n",
      "19.818860%\n",
      "19.845498%\n",
      "19.872136%\n",
      "19.898775%\n",
      "19.925413%\n",
      "19.952051%\n",
      "19.978689%\n",
      "20.005328%\n",
      "20.031966%\n",
      "20.058604%\n",
      "20.085242%\n",
      "20.111881%\n",
      "20.138519%\n",
      "20.165157%\n",
      "20.191795%\n",
      "20.218434%\n",
      "20.245072%\n",
      "20.271710%\n",
      "20.298348%\n",
      "20.324987%\n",
      "20.351625%\n",
      "20.378263%\n",
      "20.404901%\n",
      "20.431540%\n",
      "20.458178%\n",
      "20.484816%\n",
      "20.511454%\n",
      "20.538093%\n",
      "20.564731%\n",
      "20.591369%\n",
      "20.618007%\n",
      "20.644646%\n",
      "20.671284%\n",
      "20.697922%\n",
      "20.724560%\n",
      "20.751199%\n",
      "20.777837%\n",
      "20.804475%\n",
      "20.831113%\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20.857752%\n",
      "20.884390%\n",
      "20.911028%\n",
      "20.937666%\n",
      "20.964305%\n",
      "20.990943%\n",
      "21.017581%\n",
      "21.044219%\n",
      "21.070858%\n",
      "21.097496%\n",
      "21.124134%\n",
      "21.150773%\n",
      "21.177411%\n",
      "21.204049%\n",
      "21.230687%\n",
      "21.257326%\n",
      "21.283964%\n",
      "21.310602%\n",
      "21.337240%\n",
      "21.363879%\n",
      "21.390517%\n",
      "21.417155%\n",
      "21.443793%\n",
      "21.470432%\n",
      "21.497070%\n",
      "21.523708%\n",
      "21.550346%\n",
      "21.576985%\n",
      "21.603623%\n",
      "21.630261%\n",
      "21.656899%\n",
      "21.683538%\n",
      "21.710176%\n",
      "21.736814%\n",
      "21.763452%\n",
      "21.790091%\n",
      "21.816729%\n",
      "21.843367%\n",
      "21.870005%\n",
      "21.896644%\n",
      "21.923282%\n",
      "21.949920%\n",
      "21.976558%\n",
      "22.003197%\n",
      "22.029835%\n",
      "22.056473%\n",
      "22.083111%\n",
      "22.109750%\n",
      "22.136388%\n",
      "22.163026%\n",
      "22.189664%\n",
      "22.216303%\n",
      "22.242941%\n",
      "22.269579%\n",
      "22.296217%\n",
      "22.322856%\n",
      "22.349494%\n",
      "22.376132%\n",
      "22.402770%\n",
      "22.429409%\n",
      "22.456047%\n",
      "22.482685%\n",
      "22.509323%\n",
      "22.535962%\n",
      "22.562600%\n",
      "22.589238%\n",
      "22.615876%\n",
      "22.642515%\n",
      "22.669153%\n",
      "22.695791%\n",
      "22.722429%\n",
      "22.749068%\n",
      "22.775706%\n",
      "22.802344%\n",
      "22.828982%\n",
      "22.855621%\n",
      "22.882259%\n",
      "22.908897%\n",
      "22.935535%\n",
      "22.962174%\n",
      "22.988812%\n",
      "23.015450%\n",
      "23.042088%\n",
      "23.068727%\n",
      "23.095365%\n",
      "23.122003%\n",
      "23.148641%\n",
      "23.175280%\n",
      "23.201918%\n",
      "23.228556%\n",
      "23.255194%\n",
      "23.281833%\n",
      "23.308471%\n",
      "23.335109%\n",
      "23.361747%\n",
      "23.388386%\n",
      "23.415024%\n",
      "23.441662%\n",
      "23.468300%\n",
      "23.494939%\n",
      "23.521577%\n",
      "23.548215%\n",
      "23.574853%\n",
      "23.601492%\n",
      "23.628130%\n",
      "23.654768%\n",
      "23.681406%\n",
      "23.708045%\n",
      "23.734683%\n",
      "23.761321%\n",
      "23.787960%\n",
      "23.814598%\n",
      "23.841236%\n",
      "23.867874%\n",
      "23.894513%\n",
      "23.921151%\n",
      "23.947789%\n",
      "23.974427%\n",
      "24.001066%\n",
      "24.027704%\n",
      "24.054342%\n",
      "24.080980%\n",
      "24.107619%\n",
      "24.134257%\n",
      "24.160895%\n",
      "24.187533%\n",
      "24.214172%\n",
      "24.240810%\n",
      "24.267448%\n",
      "24.294086%\n",
      "24.320725%\n",
      "24.347363%\n",
      "24.374001%\n",
      "24.400639%\n",
      "24.427278%\n",
      "24.453916%\n",
      "24.480554%\n",
      "24.507192%\n",
      "24.533831%\n",
      "24.560469%\n",
      "24.587107%\n",
      "24.613745%\n",
      "24.640384%\n",
      "24.667022%\n",
      "24.693660%\n",
      "24.720298%\n",
      "24.746937%\n",
      "24.773575%\n",
      "24.800213%\n",
      "24.826851%\n",
      "24.853490%\n",
      "24.880128%\n",
      "24.906766%\n",
      "24.933404%\n",
      "24.960043%\n",
      "24.986681%\n",
      "25.013319%\n",
      "25.039957%\n",
      "25.066596%\n",
      "25.093234%\n",
      "25.119872%\n",
      "25.146510%\n",
      "25.173149%\n",
      "25.199787%\n",
      "25.226425%\n",
      "25.253063%\n",
      "25.279702%\n",
      "25.306340%\n",
      "25.332978%\n",
      "25.359616%\n",
      "25.386255%\n",
      "25.412893%\n",
      "25.439531%\n",
      "25.466169%\n",
      "25.492808%\n",
      "25.519446%\n",
      "25.546084%\n",
      "25.572722%\n",
      "25.599361%\n",
      "25.625999%\n",
      "25.652637%\n",
      "25.679275%\n",
      "25.705914%\n",
      "25.732552%\n",
      "25.759190%\n",
      "25.785828%\n",
      "25.812467%\n",
      "25.839105%\n",
      "25.865743%\n",
      "25.892381%\n",
      "25.919020%\n",
      "25.945658%\n",
      "25.972296%\n",
      "25.998934%\n",
      "26.025573%\n",
      "26.052211%\n",
      "26.078849%\n",
      "26.105487%\n",
      "26.132126%\n",
      "26.158764%\n",
      "26.185402%\n",
      "26.212040%\n",
      "26.238679%\n",
      "26.265317%\n",
      "26.291955%\n",
      "26.318594%\n",
      "26.345232%\n",
      "26.371870%\n",
      "26.398508%\n",
      "26.425147%\n",
      "26.451785%\n",
      "26.478423%\n",
      "26.505061%\n",
      "26.531700%\n",
      "26.558338%\n",
      "26.584976%\n",
      "26.611614%\n",
      "26.638253%\n",
      "26.664891%\n",
      "26.691529%\n",
      "26.718167%\n",
      "26.744806%\n",
      "26.771444%\n",
      "26.798082%\n",
      "26.824720%\n",
      "26.851359%\n",
      "26.877997%\n",
      "26.904635%\n",
      "26.931273%\n",
      "26.957912%\n",
      "26.984550%\n",
      "27.011188%\n",
      "27.037826%\n",
      "27.064465%\n",
      "27.091103%\n",
      "27.117741%\n",
      "27.144379%\n",
      "27.171018%\n",
      "27.197656%\n",
      "27.224294%\n",
      "27.250932%\n",
      "27.277571%\n",
      "27.304209%\n",
      "27.330847%\n",
      "27.357485%\n",
      "27.384124%\n",
      "27.410762%\n",
      "27.437400%\n",
      "27.464038%\n",
      "27.490677%\n",
      "27.517315%\n",
      "27.543953%\n",
      "27.570591%\n",
      "27.597230%\n",
      "27.623868%\n",
      "27.650506%\n",
      "27.677144%\n",
      "27.703783%\n",
      "27.730421%\n",
      "27.757059%\n",
      "27.783697%\n",
      "27.810336%\n",
      "27.836974%\n",
      "27.863612%\n",
      "27.890250%\n",
      "27.916889%\n",
      "27.943527%\n",
      "27.970165%\n",
      "27.996803%\n",
      "28.023442%\n",
      "28.050080%\n",
      "28.076718%\n",
      "28.103356%\n",
      "28.129995%\n",
      "28.156633%\n",
      "28.183271%\n",
      "28.209909%\n",
      "28.236548%\n",
      "28.263186%\n",
      "28.289824%\n",
      "28.316462%\n",
      "28.343101%\n",
      "28.369739%\n",
      "28.396377%\n",
      "28.423015%\n",
      "28.449654%\n",
      "28.476292%\n",
      "28.502930%\n",
      "28.529568%\n",
      "28.556207%\n",
      "28.582845%\n",
      "28.609483%\n",
      "28.636121%\n",
      "28.662760%\n",
      "28.689398%\n",
      "28.716036%\n",
      "28.742674%\n",
      "28.769313%\n",
      "28.795951%\n",
      "28.822589%\n",
      "28.849227%\n",
      "28.875866%\n",
      "28.902504%\n",
      "28.929142%\n",
      "28.955781%\n",
      "28.982419%\n",
      "29.009057%\n",
      "29.035695%\n",
      "29.062334%\n",
      "29.088972%\n",
      "29.115610%\n",
      "29.142248%\n",
      "29.168887%\n",
      "29.195525%\n",
      "29.222163%\n",
      "29.248801%\n",
      "29.275440%\n",
      "29.302078%\n",
      "29.328716%\n",
      "29.355354%\n",
      "29.381993%\n",
      "29.408631%\n",
      "29.435269%\n",
      "29.461907%\n",
      "29.488546%\n",
      "29.515184%\n",
      "29.541822%\n",
      "29.568460%\n",
      "29.595099%\n",
      "29.621737%\n",
      "29.648375%\n",
      "29.675013%\n",
      "29.701652%\n",
      "29.728290%\n",
      "29.754928%\n",
      "29.781566%\n",
      "29.808205%\n",
      "29.834843%\n",
      "29.861481%\n",
      "29.888119%\n",
      "29.914758%\n",
      "29.941396%\n",
      "29.968034%\n",
      "29.994672%\n",
      "30.021311%\n",
      "30.047949%\n",
      "30.074587%\n",
      "30.101225%\n",
      "30.127864%\n",
      "30.154502%\n",
      "30.181140%\n",
      "30.207778%\n",
      "30.234417%\n",
      "30.261055%\n",
      "30.287693%\n",
      "30.314331%\n",
      "30.340970%\n",
      "30.367608%\n",
      "30.394246%\n",
      "30.420884%\n",
      "30.447523%\n",
      "30.474161%\n",
      "30.500799%\n",
      "30.527437%\n",
      "30.554076%\n",
      "30.580714%\n",
      "30.607352%\n",
      "30.633990%\n",
      "30.660629%\n",
      "30.687267%\n",
      "30.713905%\n",
      "30.740543%\n",
      "30.767182%\n",
      "30.793820%\n",
      "30.820458%\n",
      "30.847096%\n",
      "30.873735%\n",
      "30.900373%\n",
      "30.927011%\n",
      "30.953649%\n",
      "30.980288%\n",
      "31.006926%\n",
      "31.033564%\n",
      "31.060202%\n",
      "31.086841%\n",
      "31.113479%\n",
      "31.140117%\n",
      "31.166755%\n",
      "31.193394%\n",
      "31.220032%\n",
      "31.246670%\n",
      "31.273308%\n",
      "31.299947%\n",
      "31.326585%\n",
      "31.353223%\n",
      "31.379861%\n",
      "31.406500%\n",
      "31.433138%\n",
      "31.459776%\n",
      "31.486414%\n",
      "31.513053%\n",
      "31.539691%\n",
      "31.566329%\n",
      "31.592968%\n",
      "31.619606%\n",
      "31.646244%\n",
      "31.672882%\n",
      "31.699521%\n",
      "31.726159%\n",
      "31.752797%\n",
      "31.779435%\n",
      "31.806074%\n",
      "31.832712%\n",
      "31.859350%\n",
      "31.885988%\n",
      "31.912627%\n",
      "31.939265%\n",
      "31.965903%\n",
      "31.992541%\n",
      "32.019180%\n",
      "32.045818%\n",
      "32.072456%\n",
      "32.099094%\n",
      "32.125733%\n",
      "32.152371%\n",
      "32.179009%\n",
      "32.205647%\n",
      "32.232286%\n",
      "32.258924%\n",
      "32.285562%\n",
      "32.312200%\n",
      "32.338839%\n",
      "32.365477%\n",
      "32.392115%\n",
      "32.418753%\n",
      "32.445392%\n",
      "32.472030%\n",
      "32.498668%\n",
      "32.525306%\n",
      "32.551945%\n",
      "32.578583%\n",
      "32.605221%\n",
      "32.631859%\n",
      "32.658498%\n",
      "32.685136%\n",
      "32.711774%\n",
      "32.738412%\n",
      "32.765051%\n",
      "32.791689%\n",
      "32.818327%\n",
      "32.844965%\n",
      "32.871604%\n",
      "32.898242%\n",
      "32.924880%\n",
      "32.951518%\n",
      "32.978157%\n",
      "33.004795%\n",
      "33.031433%\n",
      "33.058071%\n",
      "33.084710%\n",
      "33.111348%\n",
      "33.137986%\n",
      "33.164624%\n",
      "33.191263%\n",
      "33.217901%\n",
      "33.244539%\n",
      "33.271177%\n",
      "33.297816%\n",
      "33.324454%\n",
      "33.351092%\n",
      "33.377730%\n",
      "33.404369%\n",
      "33.431007%\n",
      "33.457645%\n",
      "33.484283%\n",
      "33.510922%\n",
      "33.537560%\n",
      "33.564198%\n",
      "33.590836%\n",
      "33.617475%\n",
      "33.644113%\n",
      "33.670751%\n",
      "33.697389%\n",
      "33.724028%\n",
      "33.750666%\n",
      "33.777304%\n",
      "33.803942%\n",
      "33.830581%\n",
      "33.857219%\n",
      "33.883857%\n",
      "33.910495%\n",
      "33.937134%\n",
      "33.963772%\n",
      "33.990410%\n",
      "34.017048%\n",
      "34.043687%\n",
      "34.070325%\n",
      "34.096963%\n",
      "34.123601%\n",
      "34.150240%\n",
      "34.176878%\n",
      "34.203516%\n",
      "34.230155%\n",
      "34.256793%\n",
      "34.283431%\n",
      "34.310069%\n",
      "34.336708%\n",
      "34.363346%\n",
      "34.389984%\n",
      "34.416622%\n",
      "34.443261%\n",
      "34.469899%\n",
      "34.496537%\n",
      "34.523175%\n",
      "34.549814%\n",
      "34.576452%\n",
      "34.603090%\n",
      "34.629728%\n",
      "34.656367%\n",
      "34.683005%\n",
      "34.709643%\n",
      "34.736281%\n",
      "34.762920%\n",
      "34.789558%\n",
      "34.816196%\n",
      "34.842834%\n",
      "34.869473%\n",
      "34.896111%\n",
      "34.922749%\n",
      "34.949387%\n",
      "34.976026%\n",
      "35.002664%\n",
      "35.029302%\n",
      "35.055940%\n",
      "35.082579%\n",
      "35.109217%\n",
      "35.135855%\n",
      "35.162493%\n",
      "35.189132%\n",
      "35.215770%\n",
      "35.242408%\n",
      "35.269046%\n",
      "35.295685%\n",
      "35.322323%\n",
      "35.348961%\n",
      "35.375599%\n",
      "35.402238%\n",
      "35.428876%\n",
      "35.455514%\n",
      "35.482152%\n",
      "35.508791%\n",
      "35.535429%\n",
      "35.562067%\n",
      "35.588705%\n",
      "35.615344%\n",
      "35.641982%\n",
      "35.668620%\n",
      "35.695258%\n",
      "35.721897%\n",
      "35.748535%\n",
      "35.775173%\n",
      "35.801811%\n",
      "35.828450%\n",
      "35.855088%\n",
      "35.881726%\n",
      "35.908364%\n",
      "35.935003%\n",
      "35.961641%\n",
      "35.988279%\n",
      "36.014917%\n",
      "36.041556%\n",
      "36.068194%\n",
      "36.094832%\n",
      "36.121470%\n",
      "36.148109%\n",
      "36.174747%\n",
      "36.201385%\n",
      "36.228023%\n",
      "36.254662%\n",
      "36.281300%\n",
      "36.307938%\n",
      "36.334576%\n",
      "36.361215%\n",
      "36.387853%\n",
      "36.414491%\n",
      "36.441129%\n",
      "36.467768%\n",
      "36.494406%\n",
      "36.521044%\n",
      "36.547682%\n",
      "36.574321%\n",
      "36.600959%\n",
      "36.627597%\n",
      "36.654235%\n",
      "36.680874%\n",
      "36.707512%\n",
      "36.734150%\n",
      "36.760788%\n",
      "36.787427%\n",
      "36.814065%\n",
      "36.840703%\n",
      "36.867342%\n",
      "36.893980%\n",
      "36.920618%\n",
      "36.947256%\n",
      "36.973895%\n",
      "37.000533%\n",
      "37.027171%\n",
      "37.053809%\n",
      "37.080448%\n",
      "37.107086%\n",
      "37.133724%\n",
      "37.160362%\n",
      "37.187001%\n",
      "37.213639%\n",
      "37.240277%\n",
      "37.266915%\n",
      "37.293554%\n",
      "37.320192%\n",
      "37.346830%\n",
      "37.373468%\n",
      "37.400107%\n",
      "37.426745%\n",
      "37.453383%\n",
      "37.480021%\n",
      "37.506660%\n",
      "37.533298%\n",
      "37.559936%\n",
      "37.586574%\n",
      "37.613213%\n",
      "37.639851%\n",
      "37.666489%\n",
      "37.693127%\n",
      "37.719766%\n",
      "37.746404%\n",
      "37.773042%\n",
      "37.799680%\n",
      "37.826319%\n",
      "37.852957%\n",
      "37.879595%\n",
      "37.906233%\n",
      "37.932872%\n",
      "37.959510%\n",
      "37.986148%\n",
      "38.012786%\n",
      "38.039425%\n",
      "38.066063%\n",
      "38.092701%\n",
      "38.119339%\n",
      "38.145978%\n",
      "38.172616%\n",
      "38.199254%\n",
      "38.225892%\n",
      "38.252531%\n",
      "38.279169%\n",
      "38.305807%\n",
      "38.332445%\n",
      "38.359084%\n",
      "38.385722%\n",
      "38.412360%\n",
      "38.438998%\n",
      "38.465637%\n",
      "38.492275%\n",
      "38.518913%\n",
      "38.545551%\n",
      "38.572190%\n",
      "38.598828%\n",
      "38.625466%\n",
      "38.652104%\n",
      "38.678743%\n",
      "38.705381%\n",
      "38.732019%\n",
      "38.758657%\n",
      "38.785296%\n",
      "38.811934%\n",
      "38.838572%\n",
      "38.865210%\n",
      "38.891849%\n",
      "38.918487%\n",
      "38.945125%\n",
      "38.971763%\n",
      "38.998402%\n",
      "39.025040%\n",
      "39.051678%\n",
      "39.078316%\n",
      "39.104955%\n",
      "39.131593%\n",
      "39.158231%\n",
      "39.184869%\n",
      "39.211508%\n",
      "39.238146%\n",
      "39.264784%\n",
      "39.291422%\n",
      "39.318061%\n",
      "39.344699%\n",
      "39.371337%\n",
      "39.397975%\n",
      "39.424614%\n",
      "39.451252%\n",
      "39.477890%\n",
      "39.504529%\n",
      "39.531167%\n",
      "39.557805%\n",
      "39.584443%\n",
      "39.611082%\n",
      "39.637720%\n",
      "39.664358%\n",
      "39.690996%\n",
      "39.717635%\n",
      "39.744273%\n",
      "39.770911%\n",
      "39.797549%\n",
      "39.824188%\n",
      "39.850826%\n",
      "39.877464%\n",
      "39.904102%\n",
      "39.930741%\n",
      "39.957379%\n",
      "39.984017%\n",
      "40.010655%\n",
      "40.037294%\n",
      "40.063932%\n",
      "40.090570%\n",
      "40.117208%\n",
      "40.143847%\n",
      "40.170485%\n",
      "40.197123%\n",
      "40.223761%\n",
      "40.250400%\n",
      "40.277038%\n",
      "40.303676%\n",
      "40.330314%\n",
      "40.356953%\n",
      "40.383591%\n",
      "40.410229%\n",
      "40.436867%\n",
      "40.463506%\n",
      "40.490144%\n",
      "40.516782%\n",
      "40.543420%\n",
      "40.570059%\n",
      "40.596697%\n",
      "40.623335%\n",
      "40.649973%\n",
      "40.676612%\n",
      "40.703250%\n",
      "40.729888%\n",
      "40.756526%\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "40.783165%\n",
      "40.809803%\n",
      "40.836441%\n",
      "40.863079%\n",
      "40.889718%\n",
      "40.916356%\n",
      "40.942994%\n",
      "40.969632%\n",
      "40.996271%\n",
      "41.022909%\n",
      "41.049547%\n",
      "41.076185%\n",
      "41.102824%\n",
      "41.129462%\n",
      "41.156100%\n",
      "41.182738%\n",
      "41.209377%\n",
      "41.236015%\n",
      "41.262653%\n",
      "41.289291%\n",
      "41.315930%\n",
      "41.342568%\n",
      "41.369206%\n",
      "41.395844%\n",
      "41.422483%\n",
      "41.449121%\n",
      "41.475759%\n",
      "41.502397%\n",
      "41.529036%\n",
      "41.555674%\n",
      "41.582312%\n",
      "41.608950%\n",
      "41.635589%\n",
      "41.662227%\n",
      "41.688865%\n",
      "41.715503%\n",
      "41.742142%\n",
      "41.768780%\n",
      "41.795418%\n",
      "41.822056%\n",
      "41.848695%\n",
      "41.875333%\n",
      "41.901971%\n",
      "41.928609%\n",
      "41.955248%\n",
      "41.981886%\n",
      "42.008524%\n",
      "42.035162%\n",
      "42.061801%\n",
      "42.088439%\n",
      "42.115077%\n",
      "42.141716%\n",
      "42.168354%\n",
      "42.194992%\n",
      "42.221630%\n",
      "42.248269%\n",
      "42.274907%\n",
      "42.301545%\n",
      "42.328183%\n",
      "42.354822%\n",
      "42.381460%\n",
      "42.408098%\n",
      "42.434736%\n",
      "42.461375%\n",
      "42.488013%\n",
      "42.514651%\n",
      "42.541289%\n",
      "42.567928%\n",
      "42.594566%\n",
      "42.621204%\n",
      "42.647842%\n",
      "42.674481%\n",
      "42.701119%\n",
      "42.727757%\n",
      "42.754395%\n",
      "42.781034%\n",
      "42.807672%\n",
      "42.834310%\n",
      "42.860948%\n",
      "42.887587%\n",
      "42.914225%\n",
      "42.940863%\n",
      "42.967501%\n",
      "42.994140%\n",
      "43.020778%\n",
      "43.047416%\n",
      "43.074054%\n",
      "43.100693%\n",
      "43.127331%\n",
      "43.153969%\n",
      "43.180607%\n",
      "43.207246%\n",
      "43.233884%\n",
      "43.260522%\n",
      "43.287160%\n",
      "43.313799%\n",
      "43.340437%\n",
      "43.367075%\n",
      "43.393713%\n",
      "43.420352%\n",
      "43.446990%\n",
      "43.473628%\n",
      "43.500266%\n",
      "43.526905%\n",
      "43.553543%\n",
      "43.580181%\n",
      "43.606819%\n",
      "43.633458%\n",
      "43.660096%\n",
      "43.686734%\n",
      "43.713372%\n",
      "43.740011%\n",
      "43.766649%\n",
      "43.793287%\n",
      "43.819925%\n",
      "43.846564%\n",
      "43.873202%\n",
      "43.899840%\n",
      "43.926478%\n",
      "43.953117%\n",
      "43.979755%\n",
      "44.006393%\n",
      "44.033031%\n",
      "44.059670%\n",
      "44.086308%\n",
      "44.112946%\n",
      "44.139584%\n",
      "44.166223%\n",
      "44.192861%\n",
      "44.219499%\n",
      "44.246137%\n",
      "44.272776%\n",
      "44.299414%\n",
      "44.326052%\n",
      "44.352690%\n",
      "44.379329%\n",
      "44.405967%\n",
      "44.432605%\n",
      "44.459243%\n",
      "44.485882%\n",
      "44.512520%\n",
      "44.539158%\n",
      "44.565796%\n",
      "44.592435%\n",
      "44.619073%\n",
      "44.645711%\n",
      "44.672349%\n",
      "44.698988%\n",
      "44.725626%\n",
      "44.752264%\n",
      "44.778903%\n",
      "44.805541%\n",
      "44.832179%\n",
      "44.858817%\n",
      "44.885456%\n",
      "44.912094%\n",
      "44.938732%\n",
      "44.965370%\n",
      "44.992009%\n",
      "45.018647%\n",
      "45.045285%\n",
      "45.071923%\n",
      "45.098562%\n",
      "45.125200%\n",
      "45.151838%\n",
      "45.178476%\n",
      "45.205115%\n",
      "45.231753%\n",
      "45.258391%\n",
      "45.285029%\n",
      "45.311668%\n",
      "45.338306%\n",
      "45.364944%\n",
      "45.391582%\n",
      "45.418221%\n",
      "45.444859%\n",
      "45.471497%\n",
      "45.498135%\n",
      "45.524774%\n",
      "45.551412%\n",
      "45.578050%\n",
      "45.604688%\n",
      "45.631327%\n",
      "45.657965%\n",
      "45.684603%\n",
      "45.711241%\n",
      "45.737880%\n",
      "45.764518%\n",
      "45.791156%\n",
      "45.817794%\n",
      "45.844433%\n",
      "45.871071%\n",
      "45.897709%\n",
      "45.924347%\n",
      "45.950986%\n",
      "45.977624%\n",
      "46.004262%\n",
      "46.030900%\n",
      "46.057539%\n",
      "46.084177%\n",
      "46.110815%\n",
      "46.137453%\n",
      "46.164092%\n",
      "46.190730%\n",
      "46.217368%\n",
      "46.244006%\n",
      "46.270645%\n",
      "46.297283%\n",
      "46.323921%\n",
      "46.350559%\n",
      "46.377198%\n",
      "46.403836%\n",
      "46.430474%\n",
      "46.457112%\n",
      "46.483751%\n",
      "46.510389%\n",
      "46.537027%\n",
      "46.563665%\n",
      "46.590304%\n",
      "46.616942%\n",
      "46.643580%\n",
      "46.670218%\n",
      "46.696857%\n",
      "46.723495%\n",
      "46.750133%\n",
      "46.776771%\n",
      "46.803410%\n",
      "46.830048%\n",
      "46.856686%\n",
      "46.883324%\n",
      "46.909963%\n",
      "46.936601%\n",
      "46.963239%\n",
      "46.989877%\n",
      "47.016516%\n",
      "47.043154%\n",
      "47.069792%\n",
      "47.096430%\n",
      "47.123069%\n",
      "47.149707%\n",
      "47.176345%\n",
      "47.202983%\n",
      "47.229622%\n",
      "47.256260%\n",
      "47.282898%\n",
      "47.309536%\n",
      "47.336175%\n",
      "47.362813%\n",
      "47.389451%\n",
      "47.416090%\n",
      "47.442728%\n",
      "47.469366%\n",
      "47.496004%\n",
      "47.522643%\n",
      "47.549281%\n",
      "47.575919%\n",
      "47.602557%\n",
      "47.629196%\n",
      "47.655834%\n",
      "47.682472%\n",
      "47.709110%\n",
      "47.735749%\n",
      "47.762387%\n",
      "47.789025%\n",
      "47.815663%\n",
      "47.842302%\n",
      "47.868940%\n",
      "47.895578%\n",
      "47.922216%\n",
      "47.948855%\n",
      "47.975493%\n",
      "48.002131%\n",
      "48.028769%\n",
      "48.055408%\n",
      "48.082046%\n",
      "48.108684%\n",
      "48.135322%\n",
      "48.161961%\n",
      "48.188599%\n",
      "48.215237%\n",
      "48.241875%\n",
      "48.268514%\n",
      "48.295152%\n",
      "48.321790%\n",
      "48.348428%\n",
      "48.375067%\n",
      "48.401705%\n",
      "48.428343%\n",
      "48.454981%\n",
      "48.481620%\n",
      "48.508258%\n",
      "48.534896%\n",
      "48.561534%\n",
      "48.588173%\n",
      "48.614811%\n",
      "48.641449%\n",
      "48.668087%\n",
      "48.694726%\n",
      "48.721364%\n",
      "48.748002%\n",
      "48.774640%\n",
      "48.801279%\n",
      "48.827917%\n",
      "48.854555%\n",
      "48.881193%\n",
      "48.907832%\n",
      "48.934470%\n",
      "48.961108%\n",
      "48.987746%\n",
      "49.014385%\n",
      "49.041023%\n",
      "49.067661%\n",
      "49.094299%\n",
      "49.120938%\n",
      "49.147576%\n",
      "49.174214%\n",
      "49.200852%\n",
      "49.227491%\n",
      "49.254129%\n",
      "49.280767%\n",
      "49.307405%\n",
      "49.334044%\n",
      "49.360682%\n",
      "49.387320%\n",
      "49.413958%\n",
      "49.440597%\n",
      "49.467235%\n",
      "49.493873%\n",
      "49.520511%\n",
      "49.547150%\n",
      "49.573788%\n",
      "49.600426%\n",
      "49.627064%\n",
      "49.653703%\n",
      "49.680341%\n",
      "49.706979%\n",
      "49.733617%\n",
      "49.760256%\n",
      "49.786894%\n",
      "49.813532%\n",
      "49.840170%\n",
      "49.866809%\n",
      "49.893447%\n",
      "49.920085%\n",
      "49.946723%\n",
      "49.973362%\n",
      "50.000000%\n",
      "50.026638%\n",
      "50.053277%\n",
      "50.079915%\n",
      "50.106553%\n",
      "50.133191%\n",
      "50.159830%\n",
      "50.186468%\n",
      "50.213106%\n",
      "50.239744%\n",
      "50.266383%\n",
      "50.293021%\n",
      "50.319659%\n",
      "50.346297%\n",
      "50.372936%\n",
      "50.399574%\n",
      "50.426212%\n",
      "50.452850%\n",
      "50.479489%\n",
      "50.506127%\n",
      "50.532765%\n",
      "50.559403%\n",
      "50.586042%\n",
      "50.612680%\n",
      "50.639318%\n",
      "50.665956%\n",
      "50.692595%\n",
      "50.719233%\n",
      "50.745871%\n",
      "50.772509%\n",
      "50.799148%\n",
      "50.825786%\n",
      "50.852424%\n",
      "50.879062%\n",
      "50.905701%\n",
      "50.932339%\n",
      "50.958977%\n",
      "50.985615%\n",
      "51.012254%\n",
      "51.038892%\n",
      "51.065530%\n",
      "51.092168%\n",
      "51.118807%\n",
      "51.145445%\n",
      "51.172083%\n",
      "51.198721%\n",
      "51.225360%\n",
      "51.251998%\n",
      "51.278636%\n",
      "51.305274%\n",
      "51.331913%\n",
      "51.358551%\n",
      "51.385189%\n",
      "51.411827%\n",
      "51.438466%\n",
      "51.465104%\n",
      "51.491742%\n",
      "51.518380%\n",
      "51.545019%\n",
      "51.571657%\n",
      "51.598295%\n",
      "51.624933%\n",
      "51.651572%\n",
      "51.678210%\n",
      "51.704848%\n",
      "51.731486%\n",
      "51.758125%\n",
      "51.784763%\n",
      "51.811401%\n",
      "51.838039%\n",
      "51.864678%\n",
      "51.891316%\n",
      "51.917954%\n",
      "51.944592%\n",
      "51.971231%\n",
      "51.997869%\n",
      "52.024507%\n",
      "52.051145%\n",
      "52.077784%\n",
      "52.104422%\n",
      "52.131060%\n",
      "52.157698%\n",
      "52.184337%\n",
      "52.210975%\n",
      "52.237613%\n",
      "52.264251%\n",
      "52.290890%\n",
      "52.317528%\n",
      "52.344166%\n",
      "52.370804%\n",
      "52.397443%\n",
      "52.424081%\n",
      "52.450719%\n",
      "52.477357%\n",
      "52.503996%\n",
      "52.530634%\n",
      "52.557272%\n",
      "52.583910%\n",
      "52.610549%\n",
      "52.637187%\n",
      "52.663825%\n",
      "52.690464%\n",
      "52.717102%\n",
      "52.743740%\n",
      "52.770378%\n",
      "52.797017%\n",
      "52.823655%\n",
      "52.850293%\n",
      "52.876931%\n",
      "52.903570%\n",
      "52.930208%\n",
      "52.956846%\n",
      "52.983484%\n",
      "53.010123%\n",
      "53.036761%\n",
      "53.063399%\n",
      "53.090037%\n",
      "53.116676%\n",
      "53.143314%\n",
      "53.169952%\n",
      "53.196590%\n",
      "53.223229%\n",
      "53.249867%\n",
      "53.276505%\n",
      "53.303143%\n",
      "53.329782%\n",
      "53.356420%\n",
      "53.383058%\n",
      "53.409696%\n",
      "53.436335%\n",
      "53.462973%\n",
      "53.489611%\n",
      "53.516249%\n",
      "53.542888%\n",
      "53.569526%\n",
      "53.596164%\n",
      "53.622802%\n",
      "53.649441%\n",
      "53.676079%\n",
      "53.702717%\n",
      "53.729355%\n",
      "53.755994%\n",
      "53.782632%\n",
      "53.809270%\n",
      "53.835908%\n",
      "53.862547%\n",
      "53.889185%\n",
      "53.915823%\n",
      "53.942461%\n",
      "53.969100%\n",
      "53.995738%\n",
      "54.022376%\n",
      "54.049014%\n",
      "54.075653%\n",
      "54.102291%\n",
      "54.128929%\n",
      "54.155567%\n",
      "54.182206%\n",
      "54.208844%\n",
      "54.235482%\n",
      "54.262120%\n",
      "54.288759%\n",
      "54.315397%\n",
      "54.342035%\n",
      "54.368673%\n",
      "54.395312%\n",
      "54.421950%\n",
      "54.448588%\n",
      "54.475226%\n",
      "54.501865%\n",
      "54.528503%\n",
      "54.555141%\n",
      "54.581779%\n",
      "54.608418%\n",
      "54.635056%\n",
      "54.661694%\n",
      "54.688332%\n",
      "54.714971%\n",
      "54.741609%\n",
      "54.768247%\n",
      "54.794885%\n",
      "54.821524%\n",
      "54.848162%\n",
      "54.874800%\n",
      "54.901438%\n",
      "54.928077%\n",
      "54.954715%\n",
      "54.981353%\n",
      "55.007991%\n",
      "55.034630%\n",
      "55.061268%\n",
      "55.087906%\n",
      "55.114544%\n",
      "55.141183%\n",
      "55.167821%\n",
      "55.194459%\n",
      "55.221097%\n",
      "55.247736%\n",
      "55.274374%\n",
      "55.301012%\n",
      "55.327651%\n",
      "55.354289%\n",
      "55.380927%\n",
      "55.407565%\n",
      "55.434204%\n",
      "55.460842%\n",
      "55.487480%\n",
      "55.514118%\n",
      "55.540757%\n",
      "55.567395%\n",
      "55.594033%\n",
      "55.620671%\n",
      "55.647310%\n",
      "55.673948%\n",
      "55.700586%\n",
      "55.727224%\n",
      "55.753863%\n",
      "55.780501%\n",
      "55.807139%\n",
      "55.833777%\n",
      "55.860416%\n",
      "55.887054%\n",
      "55.913692%\n",
      "55.940330%\n",
      "55.966969%\n",
      "55.993607%\n",
      "56.020245%\n",
      "56.046883%\n",
      "56.073522%\n",
      "56.100160%\n",
      "56.126798%\n",
      "56.153436%\n",
      "56.180075%\n",
      "56.206713%\n",
      "56.233351%\n",
      "56.259989%\n",
      "56.286628%\n",
      "56.313266%\n",
      "56.339904%\n",
      "56.366542%\n",
      "56.393181%\n",
      "56.419819%\n",
      "56.446457%\n",
      "56.473095%\n",
      "56.499734%\n",
      "56.526372%\n",
      "56.553010%\n",
      "56.579648%\n",
      "56.606287%\n",
      "56.632925%\n",
      "56.659563%\n",
      "56.686201%\n",
      "56.712840%\n",
      "56.739478%\n",
      "56.766116%\n",
      "56.792754%\n",
      "56.819393%\n",
      "56.846031%\n",
      "56.872669%\n",
      "56.899307%\n",
      "56.925946%\n",
      "56.952584%\n",
      "56.979222%\n",
      "57.005860%\n",
      "57.032499%\n",
      "57.059137%\n",
      "57.085775%\n",
      "57.112413%\n",
      "57.139052%\n",
      "57.165690%\n",
      "57.192328%\n",
      "57.218966%\n",
      "57.245605%\n",
      "57.272243%\n",
      "57.298881%\n",
      "57.325519%\n",
      "57.352158%\n",
      "57.378796%\n",
      "57.405434%\n",
      "57.432072%\n",
      "57.458711%\n",
      "57.485349%\n",
      "57.511987%\n",
      "57.538625%\n",
      "57.565264%\n",
      "57.591902%\n",
      "57.618540%\n",
      "57.645178%\n",
      "57.671817%\n",
      "57.698455%\n",
      "57.725093%\n",
      "57.751731%\n",
      "57.778370%\n",
      "57.805008%\n",
      "57.831646%\n",
      "57.858284%\n",
      "57.884923%\n",
      "57.911561%\n",
      "57.938199%\n",
      "57.964838%\n",
      "57.991476%\n",
      "58.018114%\n",
      "58.044752%\n",
      "58.071391%\n",
      "58.098029%\n",
      "58.124667%\n",
      "58.151305%\n",
      "58.177944%\n",
      "58.204582%\n",
      "58.231220%\n",
      "58.257858%\n",
      "58.284497%\n",
      "58.311135%\n",
      "58.337773%\n",
      "58.364411%\n",
      "58.391050%\n",
      "58.417688%\n",
      "58.444326%\n",
      "58.470964%\n",
      "58.497603%\n",
      "58.524241%\n",
      "58.550879%\n",
      "58.577517%\n",
      "58.604156%\n",
      "58.630794%\n",
      "58.657432%\n",
      "58.684070%\n",
      "58.710709%\n",
      "58.737347%\n",
      "58.763985%\n",
      "58.790623%\n",
      "58.817262%\n",
      "58.843900%\n",
      "58.870538%\n",
      "58.897176%\n",
      "58.923815%\n",
      "58.950453%\n",
      "58.977091%\n",
      "59.003729%\n",
      "59.030368%\n",
      "59.057006%\n",
      "59.083644%\n",
      "59.110282%\n",
      "59.136921%\n",
      "59.163559%\n",
      "59.190197%\n",
      "59.216835%\n",
      "59.243474%\n",
      "59.270112%\n",
      "59.296750%\n",
      "59.323388%\n",
      "59.350027%\n",
      "59.376665%\n",
      "59.403303%\n",
      "59.429941%\n",
      "59.456580%\n",
      "59.483218%\n",
      "59.509856%\n",
      "59.536494%\n",
      "59.563133%\n",
      "59.589771%\n",
      "59.616409%\n",
      "59.643047%\n",
      "59.669686%\n",
      "59.696324%\n",
      "59.722962%\n",
      "59.749600%\n",
      "59.776239%\n",
      "59.802877%\n",
      "59.829515%\n",
      "59.856153%\n",
      "59.882792%\n",
      "59.909430%\n",
      "59.936068%\n",
      "59.962706%\n",
      "59.989345%\n",
      "60.015983%\n",
      "60.042621%\n",
      "60.069259%\n",
      "60.095898%\n",
      "60.122536%\n",
      "60.149174%\n",
      "60.175812%\n",
      "60.202451%\n",
      "60.229089%\n",
      "60.255727%\n",
      "60.282365%\n",
      "60.309004%\n",
      "60.335642%\n",
      "60.362280%\n",
      "60.388918%\n",
      "60.415557%\n",
      "60.442195%\n",
      "60.468833%\n",
      "60.495471%\n",
      "60.522110%\n",
      "60.548748%\n",
      "60.575386%\n",
      "60.602025%\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "60.628663%\n",
      "60.655301%\n",
      "60.681939%\n",
      "60.708578%\n",
      "60.735216%\n",
      "60.761854%\n",
      "60.788492%\n",
      "60.815131%\n",
      "60.841769%\n",
      "60.868407%\n",
      "60.895045%\n",
      "60.921684%\n",
      "60.948322%\n",
      "60.974960%\n",
      "61.001598%\n",
      "61.028237%\n",
      "61.054875%\n",
      "61.081513%\n",
      "61.108151%\n",
      "61.134790%\n",
      "61.161428%\n",
      "61.188066%\n",
      "61.214704%\n",
      "61.241343%\n",
      "61.267981%\n",
      "61.294619%\n",
      "61.321257%\n",
      "61.347896%\n",
      "61.374534%\n",
      "61.401172%\n",
      "61.427810%\n",
      "61.454449%\n",
      "61.481087%\n",
      "61.507725%\n",
      "61.534363%\n",
      "61.561002%\n",
      "61.587640%\n",
      "61.614278%\n",
      "61.640916%\n",
      "61.667555%\n",
      "61.694193%\n",
      "61.720831%\n",
      "61.747469%\n",
      "61.774108%\n",
      "61.800746%\n",
      "61.827384%\n",
      "61.854022%\n",
      "61.880661%\n",
      "61.907299%\n",
      "61.933937%\n",
      "61.960575%\n",
      "61.987214%\n",
      "62.013852%\n",
      "62.040490%\n",
      "62.067128%\n",
      "62.093767%\n",
      "62.120405%\n",
      "62.147043%\n",
      "62.173681%\n",
      "62.200320%\n",
      "62.226958%\n",
      "62.253596%\n",
      "62.280234%\n",
      "62.306873%\n",
      "62.333511%\n",
      "62.360149%\n",
      "62.386787%\n",
      "62.413426%\n",
      "62.440064%\n",
      "62.466702%\n",
      "62.493340%\n",
      "62.519979%\n",
      "62.546617%\n",
      "62.573255%\n",
      "62.599893%\n",
      "62.626532%\n",
      "62.653170%\n",
      "62.679808%\n",
      "62.706446%\n",
      "62.733085%\n",
      "62.759723%\n",
      "62.786361%\n",
      "62.812999%\n",
      "62.839638%\n",
      "62.866276%\n",
      "62.892914%\n",
      "62.919552%\n",
      "62.946191%\n",
      "62.972829%\n",
      "62.999467%\n",
      "63.026105%\n",
      "63.052744%\n",
      "63.079382%\n",
      "63.106020%\n",
      "63.132658%\n",
      "63.159297%\n",
      "63.185935%\n",
      "63.212573%\n",
      "63.239212%\n",
      "63.265850%\n",
      "63.292488%\n",
      "63.319126%\n",
      "63.345765%\n",
      "63.372403%\n",
      "63.399041%\n",
      "63.425679%\n",
      "63.452318%\n",
      "63.478956%\n",
      "63.505594%\n",
      "63.532232%\n",
      "63.558871%\n",
      "63.585509%\n",
      "63.612147%\n",
      "63.638785%\n",
      "63.665424%\n",
      "63.692062%\n",
      "63.718700%\n",
      "63.745338%\n",
      "63.771977%\n",
      "63.798615%\n",
      "63.825253%\n",
      "63.851891%\n",
      "63.878530%\n",
      "63.905168%\n",
      "63.931806%\n",
      "63.958444%\n",
      "63.985083%\n",
      "64.011721%\n",
      "64.038359%\n",
      "64.064997%\n",
      "64.091636%\n",
      "64.118274%\n",
      "64.144912%\n",
      "64.171550%\n",
      "64.198189%\n",
      "64.224827%\n",
      "64.251465%\n",
      "64.278103%\n",
      "64.304742%\n",
      "64.331380%\n",
      "64.358018%\n",
      "64.384656%\n",
      "64.411295%\n",
      "64.437933%\n",
      "64.464571%\n",
      "64.491209%\n",
      "64.517848%\n",
      "64.544486%\n",
      "64.571124%\n",
      "64.597762%\n",
      "64.624401%\n",
      "64.651039%\n",
      "64.677677%\n",
      "64.704315%\n",
      "64.730954%\n",
      "64.757592%\n",
      "64.784230%\n",
      "64.810868%\n",
      "64.837507%\n",
      "64.864145%\n",
      "64.890783%\n",
      "64.917421%\n",
      "64.944060%\n",
      "64.970698%\n",
      "64.997336%\n",
      "65.023974%\n",
      "65.050613%\n",
      "65.077251%\n",
      "65.103889%\n",
      "65.130527%\n",
      "65.157166%\n",
      "65.183804%\n",
      "65.210442%\n",
      "65.237080%\n",
      "65.263719%\n",
      "65.290357%\n",
      "65.316995%\n",
      "65.343633%\n",
      "65.370272%\n",
      "65.396910%\n",
      "65.423548%\n",
      "65.450186%\n",
      "65.476825%\n",
      "65.503463%\n",
      "65.530101%\n",
      "65.556739%\n",
      "65.583378%\n",
      "65.610016%\n",
      "65.636654%\n",
      "65.663292%\n",
      "65.689931%\n",
      "65.716569%\n",
      "65.743207%\n",
      "65.769845%\n",
      "65.796484%\n",
      "65.823122%\n",
      "65.849760%\n",
      "65.876399%\n",
      "65.903037%\n",
      "65.929675%\n",
      "65.956313%\n",
      "65.982952%\n",
      "66.009590%\n",
      "66.036228%\n",
      "66.062866%\n",
      "66.089505%\n",
      "66.116143%\n",
      "66.142781%\n",
      "66.169419%\n",
      "66.196058%\n",
      "66.222696%\n",
      "66.249334%\n",
      "66.275972%\n",
      "66.302611%\n",
      "66.329249%\n",
      "66.355887%\n",
      "66.382525%\n",
      "66.409164%\n",
      "66.435802%\n",
      "66.462440%\n",
      "66.489078%\n",
      "66.515717%\n",
      "66.542355%\n",
      "66.568993%\n",
      "66.595631%\n",
      "66.622270%\n",
      "66.648908%\n",
      "66.675546%\n",
      "66.702184%\n",
      "66.728823%\n",
      "66.755461%\n",
      "66.782099%\n",
      "66.808737%\n",
      "66.835376%\n",
      "66.862014%\n",
      "66.888652%\n",
      "66.915290%\n",
      "66.941929%\n",
      "66.968567%\n",
      "66.995205%\n",
      "67.021843%\n",
      "67.048482%\n",
      "67.075120%\n",
      "67.101758%\n",
      "67.128396%\n",
      "67.155035%\n",
      "67.181673%\n",
      "67.208311%\n",
      "67.234949%\n",
      "67.261588%\n",
      "67.288226%\n",
      "67.314864%\n",
      "67.341502%\n",
      "67.368141%\n",
      "67.394779%\n",
      "67.421417%\n",
      "67.448055%\n",
      "67.474694%\n",
      "67.501332%\n",
      "67.527970%\n",
      "67.554608%\n",
      "67.581247%\n",
      "67.607885%\n",
      "67.634523%\n",
      "67.661161%\n",
      "67.687800%\n",
      "67.714438%\n",
      "67.741076%\n",
      "67.767714%\n",
      "67.794353%\n",
      "67.820991%\n",
      "67.847629%\n",
      "67.874267%\n",
      "67.900906%\n",
      "67.927544%\n",
      "67.954182%\n",
      "67.980820%\n",
      "68.007459%\n",
      "68.034097%\n",
      "68.060735%\n",
      "68.087373%\n",
      "68.114012%\n",
      "68.140650%\n",
      "68.167288%\n",
      "68.193926%\n",
      "68.220565%\n",
      "68.247203%\n",
      "68.273841%\n",
      "68.300479%\n",
      "68.327118%\n",
      "68.353756%\n",
      "68.380394%\n",
      "68.407032%\n",
      "68.433671%\n",
      "68.460309%\n",
      "68.486947%\n",
      "68.513586%\n",
      "68.540224%\n",
      "68.566862%\n",
      "68.593500%\n",
      "68.620139%\n",
      "68.646777%\n",
      "68.673415%\n",
      "68.700053%\n",
      "68.726692%\n",
      "68.753330%\n",
      "68.779968%\n",
      "68.806606%\n",
      "68.833245%\n",
      "68.859883%\n",
      "68.886521%\n",
      "68.913159%\n",
      "68.939798%\n",
      "68.966436%\n",
      "68.993074%\n",
      "69.019712%\n",
      "69.046351%\n",
      "69.072989%\n",
      "69.099627%\n",
      "69.126265%\n",
      "69.152904%\n",
      "69.179542%\n",
      "69.206180%\n",
      "69.232818%\n",
      "69.259457%\n",
      "69.286095%\n",
      "69.312733%\n",
      "69.339371%\n",
      "69.366010%\n",
      "69.392648%\n",
      "69.419286%\n",
      "69.445924%\n",
      "69.472563%\n",
      "69.499201%\n",
      "69.525839%\n",
      "69.552477%\n",
      "69.579116%\n",
      "69.605754%\n",
      "69.632392%\n",
      "69.659030%\n",
      "69.685669%\n",
      "69.712307%\n",
      "69.738945%\n",
      "69.765583%\n",
      "69.792222%\n",
      "69.818860%\n",
      "69.845498%\n",
      "69.872136%\n",
      "69.898775%\n",
      "69.925413%\n",
      "69.952051%\n",
      "69.978689%\n",
      "70.005328%\n",
      "70.031966%\n",
      "70.058604%\n",
      "70.085242%\n",
      "70.111881%\n",
      "70.138519%\n",
      "70.165157%\n",
      "70.191795%\n",
      "70.218434%\n",
      "70.245072%\n",
      "70.271710%\n",
      "70.298348%\n",
      "70.324987%\n",
      "70.351625%\n",
      "70.378263%\n",
      "70.404901%\n",
      "70.431540%\n",
      "70.458178%\n",
      "70.484816%\n",
      "70.511454%\n",
      "70.538093%\n",
      "70.564731%\n",
      "70.591369%\n",
      "70.618007%\n",
      "70.644646%\n",
      "70.671284%\n",
      "70.697922%\n",
      "70.724560%\n",
      "70.751199%\n",
      "70.777837%\n",
      "70.804475%\n",
      "70.831113%\n",
      "70.857752%\n",
      "70.884390%\n",
      "70.911028%\n",
      "70.937666%\n",
      "70.964305%\n",
      "70.990943%\n",
      "71.017581%\n",
      "71.044219%\n",
      "71.070858%\n",
      "71.097496%\n",
      "71.124134%\n",
      "71.150773%\n",
      "71.177411%\n",
      "71.204049%\n",
      "71.230687%\n",
      "71.257326%\n",
      "71.283964%\n",
      "71.310602%\n",
      "71.337240%\n",
      "71.363879%\n",
      "71.390517%\n",
      "71.417155%\n",
      "71.443793%\n",
      "71.470432%\n",
      "71.497070%\n",
      "71.523708%\n",
      "71.550346%\n",
      "71.576985%\n",
      "71.603623%\n",
      "71.630261%\n",
      "71.656899%\n",
      "71.683538%\n",
      "71.710176%\n",
      "71.736814%\n",
      "71.763452%\n",
      "71.790091%\n",
      "71.816729%\n",
      "71.843367%\n",
      "71.870005%\n",
      "71.896644%\n",
      "71.923282%\n",
      "71.949920%\n",
      "71.976558%\n",
      "72.003197%\n",
      "72.029835%\n",
      "72.056473%\n",
      "72.083111%\n",
      "72.109750%\n",
      "72.136388%\n",
      "72.163026%\n",
      "72.189664%\n",
      "72.216303%\n",
      "72.242941%\n",
      "72.269579%\n",
      "72.296217%\n",
      "72.322856%\n",
      "72.349494%\n",
      "72.376132%\n",
      "72.402770%\n",
      "72.429409%\n",
      "72.456047%\n",
      "72.482685%\n",
      "72.509323%\n",
      "72.535962%\n",
      "72.562600%\n",
      "72.589238%\n",
      "72.615876%\n",
      "72.642515%\n",
      "72.669153%\n",
      "72.695791%\n",
      "72.722429%\n",
      "72.749068%\n",
      "72.775706%\n",
      "72.802344%\n",
      "72.828982%\n",
      "72.855621%\n",
      "72.882259%\n",
      "72.908897%\n",
      "72.935535%\n",
      "72.962174%\n",
      "72.988812%\n",
      "73.015450%\n",
      "73.042088%\n",
      "73.068727%\n",
      "73.095365%\n",
      "73.122003%\n",
      "73.148641%\n",
      "73.175280%\n",
      "73.201918%\n",
      "73.228556%\n",
      "73.255194%\n",
      "73.281833%\n",
      "73.308471%\n",
      "73.335109%\n",
      "73.361747%\n",
      "73.388386%\n",
      "73.415024%\n",
      "73.441662%\n",
      "73.468300%\n",
      "73.494939%\n",
      "73.521577%\n",
      "73.548215%\n",
      "73.574853%\n",
      "73.601492%\n",
      "73.628130%\n",
      "73.654768%\n",
      "73.681406%\n",
      "73.708045%\n",
      "73.734683%\n",
      "73.761321%\n",
      "73.787960%\n",
      "73.814598%\n",
      "73.841236%\n",
      "73.867874%\n",
      "73.894513%\n",
      "73.921151%\n",
      "73.947789%\n",
      "73.974427%\n",
      "74.001066%\n",
      "74.027704%\n",
      "74.054342%\n",
      "74.080980%\n",
      "74.107619%\n",
      "74.134257%\n",
      "74.160895%\n",
      "74.187533%\n",
      "74.214172%\n",
      "74.240810%\n",
      "74.267448%\n",
      "74.294086%\n",
      "74.320725%\n",
      "74.347363%\n",
      "74.374001%\n",
      "74.400639%\n",
      "74.427278%\n",
      "74.453916%\n",
      "74.480554%\n",
      "74.507192%\n",
      "74.533831%\n",
      "74.560469%\n",
      "74.587107%\n",
      "74.613745%\n",
      "74.640384%\n",
      "74.667022%\n",
      "74.693660%\n",
      "74.720298%\n",
      "74.746937%\n",
      "74.773575%\n",
      "74.800213%\n",
      "74.826851%\n",
      "74.853490%\n",
      "74.880128%\n",
      "74.906766%\n",
      "74.933404%\n",
      "74.960043%\n",
      "74.986681%\n",
      "75.013319%\n",
      "75.039957%\n",
      "75.066596%\n",
      "75.093234%\n",
      "75.119872%\n",
      "75.146510%\n",
      "75.173149%\n",
      "75.199787%\n",
      "75.226425%\n",
      "75.253063%\n",
      "75.279702%\n",
      "75.306340%\n",
      "75.332978%\n",
      "75.359616%\n",
      "75.386255%\n",
      "75.412893%\n",
      "75.439531%\n",
      "75.466169%\n",
      "75.492808%\n",
      "75.519446%\n",
      "75.546084%\n",
      "75.572722%\n",
      "75.599361%\n",
      "75.625999%\n",
      "75.652637%\n",
      "75.679275%\n",
      "75.705914%\n",
      "75.732552%\n",
      "75.759190%\n",
      "75.785828%\n",
      "75.812467%\n",
      "75.839105%\n",
      "75.865743%\n",
      "75.892381%\n",
      "75.919020%\n",
      "75.945658%\n",
      "75.972296%\n",
      "75.998934%\n",
      "76.025573%\n",
      "76.052211%\n",
      "76.078849%\n",
      "76.105487%\n",
      "76.132126%\n",
      "76.158764%\n",
      "76.185402%\n",
      "76.212040%\n",
      "76.238679%\n",
      "76.265317%\n",
      "76.291955%\n",
      "76.318594%\n",
      "76.345232%\n",
      "76.371870%\n",
      "76.398508%\n",
      "76.425147%\n",
      "76.451785%\n",
      "76.478423%\n",
      "76.505061%\n",
      "76.531700%\n",
      "76.558338%\n",
      "76.584976%\n",
      "76.611614%\n",
      "76.638253%\n",
      "76.664891%\n",
      "76.691529%\n",
      "76.718167%\n",
      "76.744806%\n",
      "76.771444%\n",
      "76.798082%\n",
      "76.824720%\n",
      "76.851359%\n",
      "76.877997%\n",
      "76.904635%\n",
      "76.931273%\n",
      "76.957912%\n",
      "76.984550%\n",
      "77.011188%\n",
      "77.037826%\n",
      "77.064465%\n",
      "77.091103%\n",
      "77.117741%\n",
      "77.144379%\n",
      "77.171018%\n",
      "77.197656%\n",
      "77.224294%\n",
      "77.250932%\n",
      "77.277571%\n",
      "77.304209%\n",
      "77.330847%\n",
      "77.357485%\n",
      "77.384124%\n",
      "77.410762%\n",
      "77.437400%\n",
      "77.464038%\n",
      "77.490677%\n",
      "77.517315%\n",
      "77.543953%\n",
      "77.570591%\n",
      "77.597230%\n",
      "77.623868%\n",
      "77.650506%\n",
      "77.677144%\n",
      "77.703783%\n",
      "77.730421%\n",
      "77.757059%\n",
      "77.783697%\n",
      "77.810336%\n",
      "77.836974%\n",
      "77.863612%\n",
      "77.890250%\n",
      "77.916889%\n",
      "77.943527%\n",
      "77.970165%\n",
      "77.996803%\n",
      "78.023442%\n",
      "78.050080%\n",
      "78.076718%\n",
      "78.103356%\n",
      "78.129995%\n",
      "78.156633%\n",
      "78.183271%\n",
      "78.209909%\n",
      "78.236548%\n",
      "78.263186%\n",
      "78.289824%\n",
      "78.316462%\n",
      "78.343101%\n",
      "78.369739%\n",
      "78.396377%\n",
      "78.423015%\n",
      "78.449654%\n",
      "78.476292%\n",
      "78.502930%\n",
      "78.529568%\n",
      "78.556207%\n",
      "78.582845%\n",
      "78.609483%\n",
      "78.636121%\n",
      "78.662760%\n",
      "78.689398%\n",
      "78.716036%\n",
      "78.742674%\n",
      "78.769313%\n",
      "78.795951%\n",
      "78.822589%\n",
      "78.849227%\n",
      "78.875866%\n",
      "78.902504%\n",
      "78.929142%\n",
      "78.955781%\n",
      "78.982419%\n",
      "79.009057%\n",
      "79.035695%\n",
      "79.062334%\n",
      "79.088972%\n",
      "79.115610%\n",
      "79.142248%\n",
      "79.168887%\n",
      "79.195525%\n",
      "79.222163%\n",
      "79.248801%\n",
      "79.275440%\n",
      "79.302078%\n",
      "79.328716%\n",
      "79.355354%\n",
      "79.381993%\n",
      "79.408631%\n",
      "79.435269%\n",
      "79.461907%\n",
      "79.488546%\n",
      "79.515184%\n",
      "79.541822%\n",
      "79.568460%\n",
      "79.595099%\n",
      "79.621737%\n",
      "79.648375%\n",
      "79.675013%\n",
      "79.701652%\n",
      "79.728290%\n",
      "79.754928%\n",
      "79.781566%\n",
      "79.808205%\n",
      "79.834843%\n",
      "79.861481%\n",
      "79.888119%\n",
      "79.914758%\n",
      "79.941396%\n",
      "79.968034%\n",
      "79.994672%\n",
      "80.021311%\n",
      "80.047949%\n",
      "80.074587%\n",
      "80.101225%\n",
      "80.127864%\n",
      "80.154502%\n",
      "80.181140%\n",
      "80.207778%\n",
      "80.234417%\n",
      "80.261055%\n",
      "80.287693%\n",
      "80.314331%\n",
      "80.340970%\n",
      "80.367608%\n",
      "80.394246%\n",
      "80.420884%\n",
      "80.447523%\n",
      "80.474161%\n",
      "80.500799%\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "80.527437%\n",
      "80.554076%\n",
      "80.580714%\n",
      "80.607352%\n",
      "80.633990%\n",
      "80.660629%\n",
      "80.687267%\n",
      "80.713905%\n",
      "80.740543%\n",
      "80.767182%\n",
      "80.793820%\n",
      "80.820458%\n",
      "80.847096%\n",
      "80.873735%\n",
      "80.900373%\n",
      "80.927011%\n",
      "80.953649%\n",
      "80.980288%\n",
      "81.006926%\n",
      "81.033564%\n",
      "81.060202%\n",
      "81.086841%\n",
      "81.113479%\n",
      "81.140117%\n",
      "81.166755%\n",
      "81.193394%\n",
      "81.220032%\n",
      "81.246670%\n",
      "81.273308%\n",
      "81.299947%\n",
      "81.326585%\n",
      "81.353223%\n",
      "81.379861%\n",
      "81.406500%\n",
      "81.433138%\n",
      "81.459776%\n",
      "81.486414%\n",
      "81.513053%\n",
      "81.539691%\n",
      "81.566329%\n",
      "81.592968%\n",
      "81.619606%\n",
      "81.646244%\n",
      "81.672882%\n",
      "81.699521%\n",
      "81.726159%\n",
      "81.752797%\n",
      "81.779435%\n",
      "81.806074%\n",
      "81.832712%\n",
      "81.859350%\n",
      "81.885988%\n",
      "81.912627%\n",
      "81.939265%\n",
      "81.965903%\n",
      "81.992541%\n",
      "82.019180%\n",
      "82.045818%\n",
      "82.072456%\n",
      "82.099094%\n",
      "82.125733%\n",
      "82.152371%\n",
      "82.179009%\n",
      "82.205647%\n",
      "82.232286%\n",
      "82.258924%\n",
      "82.285562%\n",
      "82.312200%\n",
      "82.338839%\n",
      "82.365477%\n",
      "82.392115%\n",
      "82.418753%\n",
      "82.445392%\n",
      "82.472030%\n",
      "82.498668%\n",
      "82.525306%\n",
      "82.551945%\n",
      "82.578583%\n",
      "82.605221%\n",
      "82.631859%\n",
      "82.658498%\n",
      "82.685136%\n",
      "82.711774%\n",
      "82.738412%\n",
      "82.765051%\n",
      "82.791689%\n",
      "82.818327%\n",
      "82.844965%\n",
      "82.871604%\n",
      "82.898242%\n",
      "82.924880%\n",
      "82.951518%\n",
      "82.978157%\n",
      "83.004795%\n",
      "83.031433%\n",
      "83.058071%\n",
      "83.084710%\n",
      "83.111348%\n",
      "83.137986%\n",
      "83.164624%\n",
      "83.191263%\n",
      "83.217901%\n",
      "83.244539%\n",
      "83.271177%\n",
      "83.297816%\n",
      "83.324454%\n",
      "83.351092%\n",
      "83.377730%\n",
      "83.404369%\n",
      "83.431007%\n",
      "83.457645%\n",
      "83.484283%\n",
      "83.510922%\n",
      "83.537560%\n",
      "83.564198%\n",
      "83.590836%\n",
      "83.617475%\n",
      "83.644113%\n",
      "83.670751%\n",
      "83.697389%\n",
      "83.724028%\n",
      "83.750666%\n",
      "83.777304%\n",
      "83.803942%\n",
      "83.830581%\n",
      "83.857219%\n",
      "83.883857%\n",
      "83.910495%\n",
      "83.937134%\n",
      "83.963772%\n",
      "83.990410%\n",
      "84.017048%\n",
      "84.043687%\n",
      "84.070325%\n",
      "84.096963%\n",
      "84.123601%\n",
      "84.150240%\n",
      "84.176878%\n",
      "84.203516%\n",
      "84.230155%\n",
      "84.256793%\n",
      "84.283431%\n",
      "84.310069%\n",
      "84.336708%\n",
      "84.363346%\n",
      "84.389984%\n",
      "84.416622%\n",
      "84.443261%\n",
      "84.469899%\n",
      "84.496537%\n",
      "84.523175%\n",
      "84.549814%\n",
      "84.576452%\n",
      "84.603090%\n",
      "84.629728%\n",
      "84.656367%\n",
      "84.683005%\n",
      "84.709643%\n",
      "84.736281%\n",
      "84.762920%\n",
      "84.789558%\n",
      "84.816196%\n",
      "84.842834%\n",
      "84.869473%\n",
      "84.896111%\n",
      "84.922749%\n",
      "84.949387%\n",
      "84.976026%\n",
      "85.002664%\n",
      "85.029302%\n",
      "85.055940%\n",
      "85.082579%\n",
      "85.109217%\n",
      "85.135855%\n",
      "85.162493%\n",
      "85.189132%\n",
      "85.215770%\n",
      "85.242408%\n",
      "85.269046%\n",
      "85.295685%\n",
      "85.322323%\n",
      "85.348961%\n",
      "85.375599%\n",
      "85.402238%\n",
      "85.428876%\n",
      "85.455514%\n",
      "85.482152%\n",
      "85.508791%\n",
      "85.535429%\n",
      "85.562067%\n",
      "85.588705%\n",
      "85.615344%\n",
      "85.641982%\n",
      "85.668620%\n",
      "85.695258%\n",
      "85.721897%\n",
      "85.748535%\n",
      "85.775173%\n",
      "85.801811%\n",
      "85.828450%\n",
      "85.855088%\n",
      "85.881726%\n",
      "85.908364%\n",
      "85.935003%\n",
      "85.961641%\n",
      "85.988279%\n",
      "86.014917%\n",
      "86.041556%\n",
      "86.068194%\n",
      "86.094832%\n",
      "86.121470%\n",
      "86.148109%\n",
      "86.174747%\n",
      "86.201385%\n",
      "86.228023%\n",
      "86.254662%\n",
      "86.281300%\n",
      "86.307938%\n",
      "86.334576%\n",
      "86.361215%\n",
      "86.387853%\n",
      "86.414491%\n",
      "86.441129%\n",
      "86.467768%\n",
      "86.494406%\n",
      "86.521044%\n",
      "86.547682%\n",
      "86.574321%\n",
      "86.600959%\n",
      "86.627597%\n",
      "86.654235%\n",
      "86.680874%\n",
      "86.707512%\n",
      "86.734150%\n",
      "86.760788%\n",
      "86.787427%\n",
      "86.814065%\n",
      "86.840703%\n",
      "86.867342%\n",
      "86.893980%\n",
      "86.920618%\n",
      "86.947256%\n",
      "86.973895%\n",
      "87.000533%\n",
      "87.027171%\n",
      "87.053809%\n",
      "87.080448%\n",
      "87.107086%\n",
      "87.133724%\n",
      "87.160362%\n",
      "87.187001%\n",
      "87.213639%\n",
      "87.240277%\n",
      "87.266915%\n",
      "87.293554%\n",
      "87.320192%\n",
      "87.346830%\n",
      "87.373468%\n",
      "87.400107%\n",
      "87.426745%\n",
      "87.453383%\n",
      "87.480021%\n",
      "87.506660%\n",
      "87.533298%\n",
      "87.559936%\n",
      "87.586574%\n",
      "87.613213%\n",
      "87.639851%\n",
      "87.666489%\n",
      "87.693127%\n",
      "87.719766%\n",
      "87.746404%\n",
      "87.773042%\n",
      "87.799680%\n",
      "87.826319%\n",
      "87.852957%\n",
      "87.879595%\n",
      "87.906233%\n",
      "87.932872%\n",
      "87.959510%\n",
      "87.986148%\n",
      "88.012786%\n",
      "88.039425%\n",
      "88.066063%\n",
      "88.092701%\n",
      "88.119339%\n",
      "88.145978%\n",
      "88.172616%\n",
      "88.199254%\n",
      "88.225892%\n",
      "88.252531%\n",
      "88.279169%\n",
      "88.305807%\n",
      "88.332445%\n",
      "88.359084%\n",
      "88.385722%\n",
      "88.412360%\n",
      "88.438998%\n",
      "88.465637%\n",
      "88.492275%\n",
      "88.518913%\n",
      "88.545551%\n",
      "88.572190%\n",
      "88.598828%\n",
      "88.625466%\n",
      "88.652104%\n",
      "88.678743%\n",
      "88.705381%\n",
      "88.732019%\n",
      "88.758657%\n",
      "88.785296%\n",
      "88.811934%\n",
      "88.838572%\n",
      "88.865210%\n",
      "88.891849%\n",
      "88.918487%\n",
      "88.945125%\n",
      "88.971763%\n",
      "88.998402%\n",
      "89.025040%\n",
      "89.051678%\n",
      "89.078316%\n",
      "89.104955%\n",
      "89.131593%\n",
      "89.158231%\n",
      "89.184869%\n",
      "89.211508%\n",
      "89.238146%\n",
      "89.264784%\n",
      "89.291422%\n",
      "89.318061%\n",
      "89.344699%\n",
      "89.371337%\n",
      "89.397975%\n",
      "89.424614%\n",
      "89.451252%\n",
      "89.477890%\n",
      "89.504529%\n",
      "89.531167%\n",
      "89.557805%\n",
      "89.584443%\n",
      "89.611082%\n",
      "89.637720%\n",
      "89.664358%\n",
      "89.690996%\n",
      "89.717635%\n",
      "89.744273%\n",
      "89.770911%\n",
      "89.797549%\n",
      "89.824188%\n",
      "89.850826%\n",
      "89.877464%\n",
      "89.904102%\n",
      "89.930741%\n",
      "89.957379%\n",
      "89.984017%\n",
      "90.010655%\n",
      "90.037294%\n",
      "90.063932%\n",
      "90.090570%\n",
      "90.117208%\n",
      "90.143847%\n",
      "90.170485%\n",
      "90.197123%\n",
      "90.223761%\n",
      "90.250400%\n",
      "90.277038%\n",
      "90.303676%\n",
      "90.330314%\n",
      "90.356953%\n",
      "90.383591%\n",
      "90.410229%\n",
      "90.436867%\n",
      "90.463506%\n",
      "90.490144%\n",
      "90.516782%\n",
      "90.543420%\n",
      "90.570059%\n",
      "90.596697%\n",
      "90.623335%\n",
      "90.649973%\n",
      "90.676612%\n",
      "90.703250%\n",
      "90.729888%\n",
      "90.756526%\n",
      "90.783165%\n",
      "90.809803%\n",
      "90.836441%\n",
      "90.863079%\n",
      "90.889718%\n",
      "90.916356%\n",
      "90.942994%\n",
      "90.969632%\n",
      "90.996271%\n",
      "91.022909%\n",
      "91.049547%\n",
      "91.076185%\n",
      "91.102824%\n",
      "91.129462%\n",
      "91.156100%\n",
      "91.182738%\n",
      "91.209377%\n",
      "91.236015%\n",
      "91.262653%\n",
      "91.289291%\n",
      "91.315930%\n",
      "91.342568%\n",
      "91.369206%\n",
      "91.395844%\n",
      "91.422483%\n",
      "91.449121%\n",
      "91.475759%\n",
      "91.502397%\n",
      "91.529036%\n",
      "91.555674%\n",
      "91.582312%\n",
      "91.608950%\n",
      "91.635589%\n",
      "91.662227%\n",
      "91.688865%\n",
      "91.715503%\n",
      "91.742142%\n",
      "91.768780%\n",
      "91.795418%\n",
      "91.822056%\n",
      "91.848695%\n",
      "91.875333%\n",
      "91.901971%\n",
      "91.928609%\n",
      "91.955248%\n",
      "91.981886%\n",
      "92.008524%\n",
      "92.035162%\n",
      "92.061801%\n",
      "92.088439%\n",
      "92.115077%\n",
      "92.141716%\n",
      "92.168354%\n",
      "92.194992%\n",
      "92.221630%\n",
      "92.248269%\n",
      "92.274907%\n",
      "92.301545%\n",
      "92.328183%\n",
      "92.354822%\n",
      "92.381460%\n",
      "92.408098%\n",
      "92.434736%\n",
      "92.461375%\n",
      "92.488013%\n",
      "92.514651%\n",
      "92.541289%\n",
      "92.567928%\n",
      "92.594566%\n",
      "92.621204%\n",
      "92.647842%\n",
      "92.674481%\n",
      "92.701119%\n",
      "92.727757%\n",
      "92.754395%\n",
      "92.781034%\n",
      "92.807672%\n",
      "92.834310%\n",
      "92.860948%\n",
      "92.887587%\n",
      "92.914225%\n",
      "92.940863%\n",
      "92.967501%\n",
      "92.994140%\n",
      "93.020778%\n",
      "93.047416%\n",
      "93.074054%\n",
      "93.100693%\n",
      "93.127331%\n",
      "93.153969%\n",
      "93.180607%\n",
      "93.207246%\n",
      "93.233884%\n",
      "93.260522%\n",
      "93.287160%\n",
      "93.313799%\n",
      "93.340437%\n",
      "93.367075%\n",
      "93.393713%\n",
      "93.420352%\n",
      "93.446990%\n",
      "93.473628%\n",
      "93.500266%\n",
      "93.526905%\n",
      "93.553543%\n",
      "93.580181%\n",
      "93.606819%\n",
      "93.633458%\n",
      "93.660096%\n",
      "93.686734%\n",
      "93.713372%\n",
      "93.740011%\n",
      "93.766649%\n",
      "93.793287%\n",
      "93.819925%\n",
      "93.846564%\n",
      "93.873202%\n",
      "93.899840%\n",
      "93.926478%\n",
      "93.953117%\n",
      "93.979755%\n",
      "94.006393%\n",
      "94.033031%\n",
      "94.059670%\n",
      "94.086308%\n",
      "94.112946%\n",
      "94.139584%\n",
      "94.166223%\n",
      "94.192861%\n",
      "94.219499%\n",
      "94.246137%\n",
      "94.272776%\n",
      "94.299414%\n",
      "94.326052%\n",
      "94.352690%\n",
      "94.379329%\n",
      "94.405967%\n",
      "94.432605%\n",
      "94.459243%\n",
      "94.485882%\n",
      "94.512520%\n",
      "94.539158%\n",
      "94.565796%\n",
      "94.592435%\n",
      "94.619073%\n",
      "94.645711%\n",
      "94.672349%\n",
      "94.698988%\n",
      "94.725626%\n",
      "94.752264%\n",
      "94.778903%\n",
      "94.805541%\n",
      "94.832179%\n",
      "94.858817%\n",
      "94.885456%\n",
      "94.912094%\n",
      "94.938732%\n",
      "94.965370%\n",
      "94.992009%\n",
      "95.018647%\n",
      "95.045285%\n",
      "95.071923%\n",
      "95.098562%\n",
      "95.125200%\n",
      "95.151838%\n",
      "95.178476%\n",
      "95.205115%\n",
      "95.231753%\n",
      "95.258391%\n",
      "95.285029%\n",
      "95.311668%\n",
      "95.338306%\n",
      "95.364944%\n",
      "95.391582%\n",
      "95.418221%\n",
      "95.444859%\n",
      "95.471497%\n",
      "95.498135%\n",
      "95.524774%\n",
      "95.551412%\n",
      "95.578050%\n",
      "95.604688%\n",
      "95.631327%\n",
      "95.657965%\n",
      "95.684603%\n",
      "95.711241%\n",
      "95.737880%\n",
      "95.764518%\n",
      "95.791156%\n",
      "95.817794%\n",
      "95.844433%\n",
      "95.871071%\n",
      "95.897709%\n",
      "95.924347%\n",
      "95.950986%\n",
      "95.977624%\n",
      "96.004262%\n",
      "96.030900%\n",
      "96.057539%\n",
      "96.084177%\n",
      "96.110815%\n",
      "96.137453%\n",
      "96.164092%\n",
      "96.190730%\n",
      "96.217368%\n",
      "96.244006%\n",
      "96.270645%\n",
      "96.297283%\n",
      "96.323921%\n",
      "96.350559%\n",
      "96.377198%\n",
      "96.403836%\n",
      "96.430474%\n",
      "96.457112%\n",
      "96.483751%\n",
      "96.510389%\n",
      "96.537027%\n",
      "96.563665%\n",
      "96.590304%\n",
      "96.616942%\n",
      "96.643580%\n",
      "96.670218%\n",
      "96.696857%\n",
      "96.723495%\n",
      "96.750133%\n",
      "96.776771%\n",
      "96.803410%\n",
      "96.830048%\n",
      "96.856686%\n",
      "96.883324%\n",
      "96.909963%\n",
      "96.936601%\n",
      "96.963239%\n",
      "96.989877%\n",
      "97.016516%\n",
      "97.043154%\n",
      "97.069792%\n",
      "97.096430%\n",
      "97.123069%\n",
      "97.149707%\n",
      "97.176345%\n",
      "97.202983%\n",
      "97.229622%\n",
      "97.256260%\n",
      "97.282898%\n",
      "97.309536%\n",
      "97.336175%\n",
      "97.362813%\n",
      "97.389451%\n",
      "97.416090%\n",
      "97.442728%\n",
      "97.469366%\n",
      "97.496004%\n",
      "97.522643%\n",
      "97.549281%\n",
      "97.575919%\n",
      "97.602557%\n",
      "97.629196%\n",
      "97.655834%\n",
      "97.682472%\n",
      "97.709110%\n",
      "97.735749%\n",
      "97.762387%\n",
      "97.789025%\n",
      "97.815663%\n",
      "97.842302%\n",
      "97.868940%\n",
      "97.895578%\n",
      "97.922216%\n",
      "97.948855%\n",
      "97.975493%\n",
      "98.002131%\n",
      "98.028769%\n",
      "98.055408%\n",
      "98.082046%\n",
      "98.108684%\n",
      "98.135322%\n",
      "98.161961%\n",
      "98.188599%\n",
      "98.215237%\n",
      "98.241875%\n",
      "98.268514%\n",
      "98.295152%\n",
      "98.321790%\n",
      "98.348428%\n",
      "98.375067%\n",
      "98.401705%\n",
      "98.428343%\n",
      "98.454981%\n",
      "98.481620%\n",
      "98.508258%\n",
      "98.534896%\n",
      "98.561534%\n",
      "98.588173%\n",
      "98.614811%\n",
      "98.641449%\n",
      "98.668087%\n",
      "98.694726%\n",
      "98.721364%\n",
      "98.748002%\n",
      "98.774640%\n",
      "98.801279%\n",
      "98.827917%\n",
      "98.854555%\n",
      "98.881193%\n",
      "98.907832%\n",
      "98.934470%\n",
      "98.961108%\n",
      "98.987746%\n",
      "99.014385%\n",
      "99.041023%\n",
      "99.067661%\n",
      "99.094299%\n",
      "99.120938%\n",
      "99.147576%\n",
      "99.174214%\n",
      "99.200852%\n",
      "99.227491%\n",
      "99.254129%\n",
      "99.280767%\n",
      "99.307405%\n",
      "99.334044%\n",
      "99.360682%\n",
      "99.387320%\n",
      "99.413958%\n",
      "99.440597%\n",
      "99.467235%\n",
      "99.493873%\n",
      "99.520511%\n",
      "99.547150%\n",
      "99.573788%\n",
      "99.600426%\n",
      "99.627064%\n",
      "99.653703%\n",
      "99.680341%\n",
      "99.706979%\n",
      "99.733617%\n",
      "99.760256%\n",
      "99.786894%\n",
      "99.813532%\n",
      "99.840170%\n",
      "99.866809%\n",
      "99.893447%\n",
      "99.920085%\n",
      "99.946723%\n",
      "99.973362%\n"
     ]
    }
   ],
   "source": [
    "im_list, label_list = load_dataset(\"./data/fontset\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1, 1, 50, 50)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "im_list[0].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# label_mat = nd.zeros(len(label_list))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = nd.array(label_list, dtype=np.float32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# for im, label in dataset:\n",
    "#     a = nd.transpose(im, (2, 0, 1))\n",
    "#     b = nd.reshape(a, (1, 1, 50, 50))\n",
    "#     im_list.append(b.astype(np.float32))\n",
    "#     if label > 10:\n",
    "#         check_data(b.astype(np.float32), label)\n",
    "#         break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "imgs4D = nd.concatenate(im_list)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(450480, 1, 50, 50)\n"
     ]
    }
   ],
   "source": [
    "print(imgs4D.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open(\"./data/chi3500.txt\", 'r') as f:\n",
    "    chi3500 = f.readline()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "def check_data(data, label):\n",
    "    im_arr = nd.reshape(data, (50,50))\n",
    "    im_arr = im_arr.asnumpy()\n",
    "    plt.imshow(im_arr)\n",
    "    label_id = label if type(label) is int else int(label.asnumpy()[0])\n",
    "    print(chi3500[label_id])\n",
    "    print(label_id)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# labels = nd.zeros(imgs4D.shape[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# for i, dt in enumerate(dataset):\n",
    "#     labels[i] = np.float32(dt[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(450480,)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "labels.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(450480, 1, 50, 50)"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "imgs4D.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "街\n",
      "1276\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "check_data(imgs4D[1000], labels[1000])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "def shuffle_data(x_mat, y_mat):\n",
    "    idx = np.random.permutation(len(x_mat))\n",
    "    return x_mat[idx], y_mat[idx]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "def myIter(imgs, labels, batch_size=64):\n",
    "    i = 0\n",
    "    cnt = int(imgs.shape[0]/batch_size)\n",
    "    for i in range(cnt):\n",
    "        yield imgs[i*batch_size: (i+1)*batch_size], labels[i*batch_size: (i+1)*batch_size]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "class SampleLooper:\n",
    "    def __init__(self, x, y):\n",
    "        self._x = x\n",
    "        self._y = y\n",
    "    \n",
    "    def __call__(self):\n",
    "        self._x, self._y = shuffle_data(self._x, self._y)\n",
    "        return myIter(self._x, self._y)\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "def split_samples(x_mat, y_mat):\n",
    "    sz = y_mat.shape[0]\n",
    "    pivot = int(sz *2/3)\n",
    "    return SampleLooper(x_mat[:pivot], labels[:pivot]), SampleLooper(x_mat[pivot:], y_mat[pivot:])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "imgs4D, labels = shuffle_data(imgs4D, labels)\n",
    "train_samples, test_samples = split_samples(imgs4D, labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "\n",
       "[ 405.  175. 3690. 3308. 3428. 2017. 3216. 3206. 1935.  189.  310. 2776.\n",
       " 2544. 1751.  827. 2224. 3551.  873. 1549.  612. 3241. 1930. 1607. 2492.\n",
       " 2116. 2673. 3320. 3439. 1976. 2970.  538. 2351. 1473.  585. 3356. 2934.\n",
       " 2812. 1613. 3753. 3379. 1799.  468. 1384. 3544. 2439. 1522.  462. 2032.\n",
       " 2566. 2040.]\n",
       "<NDArray 50 @cpu(0)>"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "labels[100:150]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(64, 1, 50, 50) (64,)\n",
      "(64, 1, 50, 50) (64,)\n",
      "(64, 1, 50, 50) (64,)\n",
      "(64, 1, 50, 50) (64,)\n",
      "(64, 1, 50, 50) (64,)\n",
      "(64, 1, 50, 50) (64,)\n",
      "(64, 1, 50, 50) (64,)\n",
      "(64, 1, 50, 50) (64,)\n",
      "(64, 1, 50, 50) (64,)\n",
      "(64, 1, 50, 50) (64,)\n",
      "(64, 1, 50, 50) (64,)\n",
      "(64, 1, 50, 50) (64,)\n"
     ]
    }
   ],
   "source": [
    "for i, (datas, lbs) in enumerate(myIter(imgs4D, labels)):\n",
    "    print(datas.shape, lbs.shape)\n",
    "    if i > 10:\n",
    "        break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "def create_net(num_outputs):\n",
    "    def vgg_block(num_convs, channels):\n",
    "        out = nn.Sequential()\n",
    "        for _ in range(num_convs):\n",
    "            out.add(nn.Conv2D(channels=channels, kernel_size=3,\n",
    "                          padding=1, activation='relu'))\n",
    "        out.add(nn.MaxPool2D(pool_size=2, strides=2))\n",
    "        return out\n",
    "\n",
    "    def vgg_stack(architecture):\n",
    "        out = nn.Sequential()\n",
    "        for (num_convs, channels) in architecture:\n",
    "            out.add(vgg_block(num_convs, channels))\n",
    "        return out\n",
    "    architecture = ((1,64), (1,128), (2,256), (2,512))\n",
    "    net = nn.Sequential()\n",
    "    with net.name_scope():\n",
    "        net.add(vgg_stack(architecture))\n",
    "        net.add(nn.Flatten())\n",
    "        net.add(nn.Dense(512, activation=\"relu\"))\n",
    "        net.add(nn.Dropout(.5))\n",
    "        net.add(nn.Dense(512, activation=\"relu\"))\n",
    "        net.add(nn.Dropout(.5))\n",
    "        net.add(nn.Dense(num_outputs))\n",
    "    return net"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "net = create_net(num_classes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "# def vgg_block(num_convs, channels):\n",
    "#     out = nn.Sequential()\n",
    "#     for _ in range(num_convs):\n",
    "#         out.add(nn.Conv2D(channels=channels, kernel_size=3,\n",
    "#                       padding=1, activation='relu'))\n",
    "#     out.add(nn.MaxPool2D(pool_size=2, strides=2))\n",
    "#     return out\n",
    "\n",
    "# def vgg_stack(architecture):\n",
    "#     out = nn.Sequential()\n",
    "#     for (num_convs, channels) in architecture:\n",
    "#         out.add(vgg_block(num_convs, channels))\n",
    "#     return out\n",
    "\n",
    "# num_outputs = num_classes\n",
    "# architecture = ((1,64), (1,128), (2,256), (2,512))\n",
    "# net = nn.Sequential()\n",
    "# with net.name_scope():\n",
    "#     net.add(vgg_stack(architecture))\n",
    "#     net.add(nn.Flatten())\n",
    "#     net.add(nn.Dense(512, activation=\"relu\"))\n",
    "#     net.add(nn.Dropout(.5))\n",
    "#     net.add(nn.Dense(512, activation=\"relu\"))\n",
    "#     net.add(nn.Dropout(.5))\n",
    "#     net.add(nn.Dense(num_outputs))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "def evaluate_accuracy(data_iterator, net):\n",
    "    acc = mx.metric.Accuracy()\n",
    "    for i, (data, label) in enumerate(data_iterator):\n",
    "        data = data.as_in_context(ctx)\n",
    "        label = label.as_in_context(ctx)\n",
    "        output = net(data)\n",
    "        predictions = nd.argmax(output, axis=1)\n",
    "        acc.update(preds=predictions, labels=label)\n",
    "    logger.info(\"evaluated %d samples\"%i)\n",
    "    return acc.get()[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss()\n",
    "def train(net, train_data, test_data, num_outputs, epochs=1, learning_rate=.01, smoothing_constant=.01):\n",
    "    net.collect_params().initialize(mx.init.Xavier(magnitude=2.24),ctx=ctx)\n",
    "    trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': .05})\n",
    "    for e in range(epochs):\n",
    "        i = 0\n",
    "        for data, label in train_data():\n",
    "            data = data.as_in_context(ctx)\n",
    "            label = label.as_in_context(ctx)\n",
    "#             print(\"data.shape=\",data.shape, \", label shape\", label.shape)\n",
    "#             label_one_hot = nd.one_hot(label, num_outputs)\n",
    "            with autograd.record():\n",
    "                output = net(data)\n",
    "#                 print(\"output shape=\", output.shape, \"label_one_hot shape=\", label_one_hot.shape)\n",
    "                loss = softmax_cross_entropy(output, label)\n",
    "            loss.backward()\n",
    "            trainer.step(data.shape[0])\n",
    "\n",
    "\n",
    "            ##########################\n",
    "            #  Keep a moving average of the losses\n",
    "            ##########################\n",
    "            curr_loss = nd.mean(loss).asscalar()\n",
    "            moving_loss = (curr_loss if ((i == 0) and (e == 0))\n",
    "                           else (1 - smoothing_constant) * moving_loss + (smoothing_constant) * curr_loss)\n",
    "            if i > 0 and i % 200 == 0:\n",
    "                logger.info('Batch %d. Loss: %f' % (i, moving_loss))\n",
    "#                 print(label)\n",
    "            i += 1\n",
    "        test_accuracy = evaluate_accuracy(test_data(), net)\n",
    "        train_accuracy = evaluate_accuracy(train_data(), net)\n",
    "        logger.info(\"Epoch %s. Loss: %s, Train_acc %s, Test_acc %s\" % (e, moving_loss, train_accuracy, test_accuracy))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Batch 200. Loss: 8.240780\n"
     ]
    }
   ],
   "source": [
    "#重型代码在这里运行.\n",
    "train(net, train_samples, test_samples, num_classes, epochs=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#save net "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "net.save_parameters(\"./net.params\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [],
   "source": [
    "def show_result(sample_itr, classifier, sz=1):\n",
    "    for i, (datas, lbs) in zip(range(sz), sample_itr()):\n",
    "        datas = datas.as_in_context(ctx)\n",
    "        output = classifier(datas)\n",
    "        predictions = nd.argmax(output, axis=1)\n",
    "        print(predictions.shape)\n",
    "        for r in range(datas.shape[0]):\n",
    "            im_arr = nd.reshape(datas[r], datas.shape[2:])\n",
    "            im_arr = im_arr.asnumpy()\n",
    "            plt.imshow(im_arr)\n",
    "            print(chi3500[int(predictions.asnumpy()[r])])\n",
    "            print(chi3500[int(lbs.asnumpy()[r])])\n",
    "            print(lbs.asnumpy()[r])\n",
    "            break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [],
   "source": [
    "net2 = create_net(num_classes)\n",
    "net2.load_parameters(\"./net.params\", ctx=ctx)    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3754"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(chi3500)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "956"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "chi3500.find(\"喊\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(64,)\n",
      "匙\n",
      "匙\n",
      "337.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "show_result(train_samples, net2)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
